Как я могу преобразовать шестнадцатеричное число в десятичное число в 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

Другие вопросы по тегам