Як я можу перетворити шістнадцятковий номер у десяткове число в 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 A =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, як ми працюємо в 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)

Угг.


1
Лише 40-й біт є бітовим знаком, тому ви можете просто розділити 64-бітове значення на два 32-бітні значення, і воно завжди буде позитивним. В іншому випадку
прокладіть

2

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

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

Якщо припустити, що ви розміщуєте ці клітинки temp у рядках 1-16, це працює, витягуючи кожен символ, починаючи справа, перетворюючи його у значення, а потім застосовуючи відповідну потужність 16. Підсумовуйте всі 16 комірок, щоб отримати ваше значення.


1
IMHO 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. Сподіваюся, це допомагає.


0

HEX2DEC виходить з ладу, якщо є якісь провідні або кінцеві не шестигранні символи (ABCDEF0123456789). Простори - справжня міна, оскільки їх не видно. Часто шістнадцяткові числа, представлені у вигляді рядків, у файлах журналу містять провідні та / або проміжні пробіли. Я вважаю, що "= HEX2DEC (TRIM (A1)) зазвичай вирішує цю проблему. Однак, щось подібне" = HEX2DEC (ВПРАВО (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

Як ця мова залежить? Немає навіть ,;
подільника
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.