Используйте эту глубоко вложенную формулу :
=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