11

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

0x00006cd2c0306953

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

Я старался:

=HEX2DEC(C8)

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

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

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

8 ответов8

4

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

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

len(A1) дает вам длину строки 0x . Исключите длину 0x , оставшаяся строка является шестнадцатеричным числом. Используйте функцию 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 .

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.

2

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

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
2

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

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

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

0

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

0

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

-2

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

=HEXDEC(C8)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .