26

Я хотел бы отформатировать ячейку в Microsoft Excel 2007 в шестнадцатеричном формате, но я не нашел, как это сделать.

Есть ли встроенный способ изменить базу с 10 на 16 для клетки?

6 ответов6

16

Если вы хотите отформатировать ячейку, чтобы можно было ввести десятичное число и автоматически отобразить ее в виде шестнадцатеричного числа, то это невозможно. Вы можете либо отформатировать ячейку как текст и ввести шестнадцатеричные числа напрямую (но учтите, что Excel не может использовать их для расчетов), либо использовать функции DEC2HEX() и HEX2DEC() для преобразования между основанием 10 и основанием 16.

15

Как упоминалось ранее, формула = DEC2HEX(A1) преобразуется в шестнадцатеричный формат, а DEC2HEX(A1,8) преобразуется в шестнадцатеричный с префиксом 0 для обозначения 32 битов. Хотя добавление начальных 0 делает числа более читабельными, особенно если вы используете шрифт с фиксированной запятой, шестнадцатеричная и десятичная версии могут смешиваться, когда все цифры в номере оказываются 0-9 (например, 327701 = 50015).

Улучшение заключается в добавлении префикса "0x". Есть 2 способа сделать это. = "0x" & DEC2HEX(A1,8) добьется цели, но изменит поле на текстовое, так что его уже нельзя будет легко использовать в формулах. Другой способ - использовать пользовательский формат. Если вы примените пользовательский формат "0x" @ к ячейке, тогда значение ячейки все еще может быть использовано в уравнении. Примеры:


╔═══╦════════════════╦════════════╦═════════════════════════════╦═══════════════╗
║   ║       A        ║     B      ║                             ║               ║
╠═══╬════════════════╬════════════╬═════════════════════════════╬═══════════════╣
║ 1 ║                ║ Value      ║ Corresponding Formula       ║ Number Format ║
║ 2 ║ Decimal        ║ 11162790   ║ 11162790                    ║ General       ║
║ 3 ║ Hex            ║ AA54A6     ║ =DEC2HEX(B2)                ║ General       ║
║ 4 ║ leading 0's    ║ 00AA54A6   ║ =DEC2HEX(B2,8)              ║ General       ║
║ 5 ║ Text 0x prefix ║ 0x00AA54A6 ║ =DEC2HEX(B2,8)              ║ "0x"@         ║
║ 6 ║ Text 0x prefix ║ 0x00AA54A6 ║ ="0x" & DEC2HEX(B2,8)       ║ General       ║
║ 7 ║ Use B5         ║ AA54A600   ║ =DEC2HEX(HEX2DEC(B5) * 256) ║ General       ║
║ 8 ║ Use B5         ║ 0xAA54A600 ║ =DEC2HEX(HEX2DEC(B5) * 256) ║ "0x"@         ║
║ 9 ║ Try to use B6  ║ #NUM!      ║ =DEC2HEX(HEX2DEC(B6) * 256) ║ General       ║
╚═══╩════════════════╩════════════╩═════════════════════════════╩═══════════════╝


Тем не менее, большие числа с разными цифрами все еще трудно читать, поэтому я предпочитаю ставить запятые в десятичные числа, а "_" - в шестнадцатеричные числа. Сначала вам нужно получить верхний и нижний 16 бит числа. Старшие 16 бит 32-битного числа могут быть получены с помощью = INT (A1 / 2 ^ 16). Деление на 2 ^ 16 действует как сдвиг вправо на 16 бит, а INT удаляет дробный остаток. MOD может использоваться для получения младших 16 бит любого 32- или 64-битного числа; = MOD (A1, 2 ^ 16). Мод эффективно возвращает остаток, то есть младшие 16 бит. Вот таблица, которая показывает это в действии.
╔═══╦═════════════╦═══════════════╦════════════════════════════════════╦═════════╗
║   ║      A      ║      B        ║                                    ║         ║
╠═══╬═════════════╬═══════════════╬════════════════════════════════════╬═════════╣
║ 1 ║             ║ Value         ║ Corresponding Formula              ║ Format  ║
║ 2 ║ Decimal     ║ 3,098,743,209 ║ 3098743209                         ║ #,##0   ║
║ 3 ║ Upper Bytes ║ B8B3          ║ =DEC2HEX(INT( B2/2^16 ), 4)        ║ General ║
║ 4 ║ Lower Bytes ║ 11A9          ║ =DEC2HEX(MOD( B2, 2^16 ))          ║ General ║
║ 5 ║ Full Number ║ 0xB8B3_11A9   ║ ="0x" & DEC2HEX(INT( B2/2^16 ), 4) ║ General ║
║   ║             ║               ║ & "_" & DEC2HEX(MOD(B2, 2^16), 4)  ║         ║
╚═══╩═════════════╩═══════════════╩════════════════════════════════════╩═════════╝


Кстати, я должен поблагодарить https://ozh.github.io/ascii-tables/ . Я использовал эту ссылку для создания текстовых таблиц ASCII. Я просто скопировал таблицу из моей таблицы Excel в ее раздел ввода, и она автоматически создала красивую разметку текста в юникоде.
7

Если для преобразования используется ячейка A1 используйте =DEC2HEX(A1) .

4

Если вам нужно выполнить математические операции с числами, преобразованными в шестнадцатеричные числа, сначала преобразуйте их в десятичные числа, выполните операцию, а затем верните обратно в шестнадцатеричное.

Например, если ячейка A1 имеет шестнадцатеричное число, например, созданное по этой формуле:

=DEC2HEX(17)

который будет отображаться как 11, а ячейка A2 имеет формулу:

=DEC2HEX(165)

который будет отображаться как A5 , и вы хотите добавить их вместе, тогда эта формула получит желаемый результат:

=DEC2HEX(HEX2DEC(A1)+HEX2DEC(A2))

который будет отображаться как B6

1
=REPT("0",4-LEN(DEC2HEX(B3)))&DEC2HEX(B3)

Формула REPT повторяет "0" в зависимости от длины шестнадцатеричной строки, сгенерированной путем преобразования ее из десятичной, и требуемой длины строки HEX. В этом примере я хочу сгенерировать строки HEX длиной 4.

Затем вы объединяете ведущие нули в фактическую строку HEX, тем самым генерируя значение HEX желаемой длины.

Преимущества:

  1. Простое копирование формулы в другой лист. Только две ссылки на ячейку для десятичного значения, B3, для переназначения.
  2. Результаты этой формулы обрабатываются Excel как значения HEX. Вы также можете добавить префикс "0x", но я не считаю это необходимым.

Примечание: я использую это, когда копирую строки HEX, и они копируются с различной длиной. Сначала я генерирую столбец десятичных значений из исходных значений, с которыми затем могу запустить эту формулу.

0

Вот решение, которое я нашел, чтобы убедиться, что я могу отформатировать эти шестнадцатеричные числа в формат HTML:

SWITCH(LEN(DEC2HEX(B6)),1,"000"&DEC2HEX(B6),2,"00"&DEC2HEX(B6),3,"0"&DEC2HEX(B6),4,DEC2HEX(B6))

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