用EXCEL转换固定位数的十六进制到十进制

EXCEL的HEX2DEC()函数可以进行十六进制到十进制的转换

但是它是40bit的,40bit的,40bit……

也就是说如果你想转换一个32bit的十六进制数 0xFFFF,FFFF,这个数显然转换成int是-1,但是你用HEX2DEC转换出来的就是

Paste_Image.png

为什么?

因为EXCEL硬生生的在你的十六进制数前面加了2个0,变成一个40bit数0x00,FFFF,FFFF,这样转换就变成了上面的结果。

那么我们想正常地转换一个十六进制数该怎么办?

以下就是公式

=IF(HEX2DEC(LEFT(num,1))<8,HEX2DEC(num),-HEX2DEC(DEC2HEX(2^n-HEX2DEC(num),n/4)))

其中 num 就是你要转换的数,n是指你要转换的位数, 比如我们要转换0xFFFF,FFFF,那么num=FFFF,FFFF,n=32

拿走不谢!

什么? 你还想知道原理?那就继续往下看,其实我也是瞎弄的。。。

主体IF语句用来控制十六进制数最高bit是否是1的,HEX2DEC(LEFT(num,1))<8这个公式即判断num的最左的数是否<8,如果小于8,那么这个数是正数,直接转换就行HEX2DEC(num),如果>=8,那么就用这个公式:-HEX2DEC(DEC2HEX(2n-HEX2DEC(num),n/4)),其中2n-HEX2DEC(num)用于计算num的补码,然后再用DEC2HEX()将补码转换成我们所需的位数的十六进制数,再再用HEX2DEC转换成十进制数,取负号,大功告成。

你可能感兴趣的:(用EXCEL转换固定位数的十六进制到十进制)