Преобразование любой длины шестнадцатеричного числа со знаком в десятичное число со знаком (Excel) - PullRequest
0 голосов
/ 13 сентября 2018

Вопрос

Когда сталкиваются со знаковыми шестнадцатеричными числами неизвестной длины, как можно использовать формулы Excel для простого преобразования этих шестнадцатеричных чисел в десятичные числа?

Пример

Hex
---
00
FF
FE
FD
0A
0B

1 Ответ

0 голосов
/ 13 сентября 2018

Используйте эту глубоко вложенную формулу :

=HEX2DEC(N)-IF(ISERR(FIND(LEFT(IF(ISEVEN(LEN(N)),N,CONCAT(0,N))),"01234567")),16^LEN(IF(ISEVEN(LEN(N)),N,CONCAT(0,N))),0)

, где N - это ячейка, содержащая шестнадцатеричные данные.

Эта формула становится более читаемой при расширении:

=HEX2DEC(N) -
 /* check if sign bit is present in leftmost nibble, padding to an even number of digits if necessary */
 IF( ISERR( FIND( LEFT( IF( ISEVEN(LEN(N))
                          , N
                          , CONCAT(0,N)
                          )
                      )
                , "01234567"
                )
          )
   /* offset if sign bit is present */
   , 16^LEN( IF( ISEVEN(LEN(N))
               , N
               , CONCAT(0,N)
               )
            )
   /* do not offset if sign bit is absent */
   , 0
   )

и может читаться как «Сначала преобразуйте шестнадцатеричное значение в десятичное значение без знака. Затем сместите десятичное значение без знака, если крайний левый клев данных содержит бит знака; иначе не смещайте».

Пример преобразования

Hex  | Dec
-----|----
00   |   0
FF   |  -1
FE   |  -2
FD   |  -3
0A   |  10
0B   |  11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...