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