Шестнадцатеричные значения одним словом в Excel - PullRequest
0 голосов
/ 27 мая 2018

Как мне сделать, чтобы Excel 2016 преобразовывал шестнадцатеричное значение в одном слове (два байта) в десятичное (0xffff должен быть преобразован в -1, а не в 65535)?Спасибо

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Предполагая, что у вас есть 16-битное (2-байтовое) шестнадцатеричное значение (например, "FFFF") в ячейке A1, вы можете сделать это:

=BITXOR(HEX2DEC(A1),2^15)-2^15

Это будет:

  1. Преобразование шестнадцатеричного значения в десятичное число без знака (с предполагаемым отрицательным диапазоном чисел, начинающимся с 2 ^ 15, то есть выше предполагаемого неотрицательного диапазона).
  2. Инвертирует старший значащий бит (бит 15) вчтобы поменять местами предполагаемые неотрицательные и отрицательные диапазоны (оба диапазона все еще неотрицательны в этой точке, но теперь предполагаемый отрицательный диапазон находится ниже предполагаемого неотрицательного диапазона).
  3. Сдвиньте оба диапазона вниз, чтобыпредполагаемый отрицательный диапазон достигает своего конечного пункта назначения ниже нуля, а предполагаемый неотрицательный диапазон достигает своего конечного пункта назначения с нуля и выше.

Примеры: «0» становится 0, «7FFF» становится 32767,«8000» становится -32768, а «FFFF» становится -1.

Примечание: если входное значение содержит мусор (например, «0x») до или после фактического шестнадцатеричного значения, то этот мусор должен быть удален (например, делая MID (A1,3,4)) до вызова HEX2DEC.

0 голосов
/ 27 мая 2018

Префикс 0x (используется для обозначения шестнадцатеричной записи в ) может быть просто отброшен.

Тогда функция Excel HEX2DEC может выполнить преобразование.

Так что, если A1 содержит 0x3039, вы можете использовать эту формулу в B2 (или где-либо еще), чтобы преобразовать еедо десятичного числа:

=HEX2DEC(MID(A1,3,99))

Параметры функции MID говорят: «возвращает строку длиной до 99 символов, начиная с 3-го символа А1.» (Итак, отбросьте первыйдва символа)

... и, чтобы восполнить свое "пользовательское правило -1", вы можете добавить оператор IF:

=IF(LOWER(A1)="0xffff",-1,HEX2DEC(MID(A1,3,99)))

Дополнительная информация:

...