Как я могу преобразовать шестнадцатеричное число в десятичное число в Excel?
У меня есть ячейка, содержащая это значение:
0x00006cd2c0306953
и я хочу преобразовать его в число.
Я старался:
=HEX2DEC(C8)
где C8
это ячейка, содержащая мое шестнадцатеричное значение.
Я получаю ошибку #NUM.
Что я делаю неправильно?
9 ответов
Вы можете просто использовать:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
дает вам длину 0x
строка. Исключить длину 0x
оставшаяся строка является шестнадцатеричным числом. Используйте функцию Excel, чтобы получить дек.
Как указано TwiterZX, Hex2Dec
ввод ограничен 10 символами и 6cd2c0306953
12 символов. Так что это не сработает, но давайте выполним нашу собственную функцию для этого. Используя VBA, добавьте модуль и используйте следующий код (может потребоваться настроить в соответствии с вашими потребностями)
' Force explicit declaration of variables
Option Explicit
' Convert hex to decimal
' In: Hex in string format
' Out: Double
Public Function HexadecimalToDecimal(HexValue As String) As Double
' If hex starts with 0x, replace it with &H to represent Hex that VBA will understand
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
В Excel, скажем, ячейка A1 содержит 0x00006cd2c0306953
А2 формула =HexadecimalToDecimal(A1)
приведет к 1.19652E+14
, Отформатируйте столбец в число с нулевыми десятичными знаками, и результат будет 119652423330131
,
HEX2DEC ограничен 10 символами, но это не значит, что мы не можем его использовать. Просто используйте его несколько раз, чтобы преобразовать 10 символов за раз и применить соответствующую мощность 2 для каждого использования.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Отказ от ответственности: не проверено в данный момент]
Позже: я сейчас в электронной таблице, готов к тестированию. Измените 3,5 в MID на 3,6. Хм.. Все еще не прав.
Оказывается, что HEX2DEC работает со знаковыми шестнадцатеричными значениями, поэтому первый член оказывается отрицательным. Не уверен почему, но вот исправленная версия, которая добавляет 2^40 (или 16^10, как мы работаем в шестнадцатеричном формате) для исправления:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Однако это работает только в том случае, если ПРАВО (C8,10) оказывается отрицательным. Вот мое общее решение:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh.
Попробуйте следующее:
=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
Один грязный способ выполнить это преобразование без использования функции (см. Эту ветку форума Excel) - использовать эту формулу для вычисления значения каждого символа в строке, а затем суммировать их. Это очевидно включает использование временных ячеек для разложения числа:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Предполагая, что вы помещаете эти временные ячейки в строки с 1 по 16, это работает путем извлечения каждого символа, начиная справа, преобразовывая его в значение, а затем применяя соответствующую степень 16. Суммируйте все 16 ячеек, чтобы получить ваше значение.
Длинная формула, но она работает для 64-HEX символов:
=HEX2DEC(MID(A24,1,8))*2^512 **(*4)** +HEX2DEC(MID(A24,9,8))*2^512 **(*2)** +HEX2DEC(MID(A24,17,8))*2^512+HEX2DEC(MID(A24,25,8))*2^256+HEX2DEC(MID(A24,33,8))*2^128+HEX2DEC(MID(A24,41,8))*2^64+HEX2DEC(MID(A24,49,8))*2^32+HEX2DEC(MID(A24,57,8))
пожалуйста, обрати внимание:
(*4) = *4
(убрать скобки)
and:
(*2) = *2
(убрать скобки)
Также обратите внимание: все 64 символа должны присутствовать, как показано в следующем примере:
0000000000000000000000000000000000000000000000000000000000000fd1
Ваше здоровье
Сбой HEX2DEC, если есть начальные или конечные не шестнадцатеричные (ABCDEF0123456789) символы. Пространства - настоящая мина, потому что они не видны. Часто шестнадцатеричные числа, представленные в виде строк, в файлах журнала содержат начальные и / или конечные пробелы. Я нахожу, что "=HEX2DEC(TRIM(A1)) обычно решает эту проблему. Однако что-то вроде"=HEX2DEC(RIGHT(TRIM(A1), 10)) может быть необходимо из-за ограничения в 10 символов HEX2DEC.
Убедитесь, что ваш столбец с номерами HEX не имеет 0x. Номер HEX должен быть C8, а не 0xC8. Надеюсь, поможет.
Эта функция изменилась, попробуйте использовать
=HEXDEC(C8)
так что без номера 2 между HEX и DEC