【发布时间】:2019-02-18 12:19:13
【问题描述】:
问题
面对未知长度的有符号十六进制数,如何使用 Excel 公式轻松将这些十六进制数转换为十进制数?
示例
Hex
---
00
FF
FE
FD
0A
0B
【问题讨论】:
标签: excel excel-formula hex decimal
问题
面对未知长度的有符号十六进制数,如何使用 Excel 公式轻松将这些十六进制数转换为十进制数?
示例
Hex
---
00
FF
FE
FD
0A
0B
【问题讨论】:
标签: excel excel-formula hex decimal
使用这个嵌套很深的formula:
=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
【讨论】:
让A1 单元格包含一个任意大小写的 1 字节十六进制字符串。
要获取此字符串的 2 的补码十进制值,请使用以下命令:
=HEX2DEC(A1)-IF(HEX2DEC(A1) > 127, 256, 0)
对于任意长度的字节,请使用以下内容:
=HEX2DEC(A1) - IF(HEX2DEC(A1) > POWER(2, 4*LEN(A1))/2 - 1, POWER(2, 4*LEN(A1)), 0)
【讨论】: