У меня есть ячейка, содержащая это значение:
0x00006cd2c0306953
и я хочу преобразовать его в число.
Я старался:
=HEX2DEC(C8)
где C8
находится ячейка, содержащая мое шестнадцатеричное значение.
Я получаю ошибку #NUM.
Что я делаю неправильно?
microsoft-excel
conversion
hexadecimal
Натан Феллман
источник
источник
Ответы:
Вы можете просто использовать:
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, добавьте модуль и используйте следующий код (может потребоваться настроить в соответствии с вашими потребностями)В Excel, скажем, ячейка A1 содержит
0x00006cd2c0306953
, формула A2=HexadecimalToDecimal(A1)
будет в результате1.19652E+14
. Отформатируйте столбец в число с нулевыми десятичными знаками, и результат будет119652423330131
.источник
HEX2DEC ограничен 10 символами, но это не значит, что мы не можем его использовать. Просто используйте его несколько раз, чтобы преобразовать 10 символов за раз и применить соответствующую мощность 2 для каждого использования.
[Отказ от ответственности: не проверено в данный момент]
Позже: я сейчас в электронной таблице, готов к тестированию. Измените 3,5 в MID на 3,6. Хм .. все еще не правильно.
Оказывается, что HEX2DEC работает со знаковыми шестнадцатеричными значениями, поэтому первый член оказывается отрицательным. Не знаю почему, но вот исправленная версия, которая добавляет 2 ^ 40 (или 16 ^ 10, как мы работаем в шестнадцатеричном формате) для исправления:
Однако это работает, только если ПРАВО (C8,10) оказывается отрицательным. Вот мое общее решение:
Ugggh.
источник
Один грязный способ выполнить это преобразование без использования функции (см. Эту ветку форума Excel ) - использовать эту формулу для вычисления значения каждого символа в строке, а затем суммировать их. Это очевидно включает использование временных ячеек для разложения числа:
Предполагая, что вы размещаете эти временные ячейки в строках с 1 по 16, это работает путем извлечения каждого символа, начиная справа, преобразовывая его в значение, затем применяя соответствующую степень 16. Суммируйте все 16 ячеек, чтобы получить ваше значение.
источник
16^(ROW() - 1)
намного чище и легче читать, чемPOWER()
Попробуйте следующее:
источник
2^32
?Убедитесь, что ваш столбец с номерами HEX не имеет 0x. Номер HEX должен быть C8, а не 0xC8. Надеюсь, это поможет.
источник
Сбой HEX2DEC, если есть начальные или конечные не шестнадцатеричные (ABCDEF0123456789) символы. Пространства - настоящая мина, потому что они не видны. Часто шестнадцатеричные числа, представленные в виде строк, в файлах журнала содержат начальные и / или конечные пробелы. Я нахожу, что "= HEX2DEC (TRIM (A1)) обычно решает эту проблему. Однако что-то вроде" = HEX2DEC (RIGHT (TRIM (A1), 10)) может быть необходимо из-за ограничения в 10 символов HEX2DEC.
источник
Эта функция изменилась, попробуйте использовать
так что без номера 2 между HEX и DEC
источник
,
или;
здесь