EXCEL的HEX2DEC()函数可以进行十六进制到十进制的转换
但是它是40bit的,40bit的,40bit……
也就是说如果你想转换一个32bit的十六进制数 0xFFFF,FFFF,这个数显然转换成int是-1,但是你用HEX2DEC转换出来的就是
为什么?
因为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转换成十进制数,取负号,大功告成。