Как я могу преобразовать шестнадцатеричное число в десятичное число в Excel?

11

У меня есть ячейка, содержащая это значение:

0x00006cd2c0306953

и я хочу преобразовать его в число.

Я старался:

=HEX2DEC(C8)

где C8находится ячейка, содержащая мое шестнадцатеричное значение.

Я получаю ошибку #NUM.

Что я делаю неправильно?

Натан Феллман
источник
по моему мнению, C не капитал, это может быть мало. так что попробуйте 'c8'
Sandy8086
7
@ Sandy8086: Excel не заботится о случае с клетками
Натан Феллман,

Ответы:

5

Вы можете просто использовать:

HEX2DEC(right(A1,(len(A1)-2)))

len(A1)дает вам длину 0xстроки. Исключите длину 0x, оставшаяся строка является шестнадцатеричным числом. Используйте функцию Excel, чтобы получить дек.

Вегета
источник
Вы пробовали это? Вы читали что-нибудь на этой странице? Было указано три раза, что HEX2DECдопускается не более десяти шестнадцатеричных цифр. Строка в вопросе 0x00006cd2c0306953длиной 18 символов. Ваше решение оценивает RIGHT(A1,(LEN(A1)-2)); 18-2 равно 16, поэтому RIGHT(…)возвращается 00006cd2c0306953, что составляет 16 цифр. Даже если вы удалите начальные нули, у вас будет 12 цифр, что все равно слишком много. Если вы можете заставить это работать, пожалуйста, опишите вашу конфигурацию. (То есть, какую версию Excel вы используете? И сделали ли вы что-нибудь хитрое, чтобы заставить это работать?)
Скотт
4

Как указано в 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, формула A2 =HexadecimalToDecimal(A1)будет в результате 1.19652E+14. Отформатируйте столбец в число с нулевыми десятичными знаками, и результат будет 119652423330131.

zedfoxus
источник
3

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.

Билл Нэйс
источник
1
Только 40-й бит является знаковым битом, поэтому вы можете просто разделить 64-битное значение на два 32-битных значения, и оно всегда будет положительным. В противном случае добавьте ноль в шестнадцатеричную строку, если она короче 37 бит
phuclv
2

Один грязный способ выполнить это преобразование без использования функции (см. Эту ветку форума Excel ) - использовать эту формулу для вычисления значения каждого символа в строке, а затем суммировать их. Это очевидно включает использование временных ячеек для разложения числа:

=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)

Предполагая, что вы размещаете эти временные ячейки в строках с 1 по 16, это работает путем извлечения каждого символа, начиная справа, преобразовывая его в значение, затем применяя соответствующую степень 16. Суммируйте все 16 ячеек, чтобы получить ваше значение.

Доминик Жакель
источник
1
ИМХО 16^(ROW() - 1)намного чище и легче читать, чемPOWER()
phuclv
2

Попробуйте следующее:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
Стас
источник
почему не используете 2^32?
phuclv
0

Убедитесь, что ваш столбец с номерами HEX не имеет 0x. Номер HEX должен быть C8, а не 0xC8. Надеюсь, это поможет.

user2794645
источник
0

Сбой HEX2DEC, если есть начальные или конечные не шестнадцатеричные (ABCDEF0123456789) символы. Пространства - настоящая мина, потому что они не видны. Часто шестнадцатеричные числа, представленные в виде строк, в файлах журнала содержат начальные и / или конечные пробелы. Я нахожу, что "= HEX2DEC (TRIM (A1)) обычно решает эту проблему. Однако что-то вроде" = HEX2DEC (RIGHT (TRIM (A1), 10)) может быть необходимо из-за ограничения в 10 символов HEX2DEC.

Джордж Х. Барбехенн
источник
-2

Эта функция изменилась, попробуйте использовать

=HEXDEC(C8)

так что без номера 2 между HEX и DEC

Риад Крым
источник
1
Это не работает вообще
Натан Феллман
Я думаю, что эта функция зависит от языка, каков основной язык вашего приложения Excel и ваша версия?
Риад Крым
Office 2010 на английском языке
Натан Феллман
4
Функция HEX2DEC (или HEXDEC) ограничена 40 битами (10 символов), а ваш номер - 12 символов office.microsoft.com/en-us/excel-help/…
Riad Krim
Как зависит этот язык? Там нет даже разделителя функций, как ,или ;здесь
phuclv