У меня есть ячейка, содержащая это значение:
0x00006cd2c0306953
и я хочу преобразовать его в число.
Я старался:
=HEX2DEC(C8)
где C8находится ячейка, содержащая мое шестнадцатеричное значение.
Я получаю ошибку #NUM.
Что я делаю неправильно?
У меня есть ячейка, содержащая это значение:
0x00006cd2c0306953
и я хочу преобразовать его в число.
Я старался:
=HEX2DEC(C8)
где C8находится ячейка, содержащая мое шестнадцатеричное значение.
Я получаю ошибку #NUM.
Что я делаю неправильно?
Ответы:
Вы можете просто использовать:
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 вы используете? И сделали ли вы что-нибудь хитрое, чтобы заставить это работать?)
Как указано в 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.
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.
Один грязный способ выполнить это преобразование без использования функции (см. Эту ветку форума Excel ) - использовать эту формулу для вычисления значения каждого символа в строке, а затем суммировать их. Это очевидно включает использование временных ячеек для разложения числа:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Предполагая, что вы размещаете эти временные ячейки в строках с 1 по 16, это работает путем извлечения каждого символа, начиная справа, преобразовывая его в значение, затем применяя соответствующую степень 16. Суммируйте все 16 ячеек, чтобы получить ваше значение.
16^(ROW() - 1)намного чище и легче читать, чемPOWER()
Убедитесь, что ваш столбец с номерами HEX не имеет 0x. Номер HEX должен быть C8, а не 0xC8. Надеюсь, это поможет.
Сбой HEX2DEC, если есть начальные или конечные не шестнадцатеричные (ABCDEF0123456789) символы. Пространства - настоящая мина, потому что они не видны. Часто шестнадцатеричные числа, представленные в виде строк, в файлах журнала содержат начальные и / или конечные пробелы. Я нахожу, что "= HEX2DEC (TRIM (A1)) обычно решает эту проблему. Однако что-то вроде" = HEX2DEC (RIGHT (TRIM (A1), 10)) может быть необходимо из-за ограничения в 10 символов HEX2DEC.
Эта функция изменилась, попробуйте использовать
=HEXDEC(C8)
так что без номера 2 между HEX и DEC
,или ;здесь