EXCEL的HEX2DEC()函數(shù)可以進(jìn)行十六進(jìn)制到十進(jìn)制的轉(zhuǎn)換
但是它是40bit的谆级,40bit的,40bit……
也就是說(shuō)如果你想轉(zhuǎn)換一個(gè)32bit的十六進(jìn)制數(shù) 0xFFFF,FFFF雌芽,這個(gè)數(shù)顯然轉(zhuǎn)換成int是-1,但是你用HEX2DEC轉(zhuǎn)換出來(lái)的就是
為什么?
因?yàn)镋XCEL硬生生的在你的十六進(jìn)制數(shù)前面加了2個(gè)0曙博,變成一個(gè)40bit數(shù)0x00,FFFF,FFFF,這樣轉(zhuǎn)換就變成了上面的結(jié)果怜瞒。
那么我們想正常地轉(zhuǎn)換一個(gè)十六進(jìn)制數(shù)該怎么辦父泳?
以下就是公式
=IF(HEX2DEC(LEFT(num,1))<8,HEX2DEC(num),-HEX2DEC(DEC2HEX(2^n-HEX2DEC(num),n/4)))
其中 num 就是你要轉(zhuǎn)換的數(shù),n是指你要轉(zhuǎn)換的位數(shù)吴汪, 比如我們要轉(zhuǎn)換0xFFFF,FFFF惠窄,那么num=FFFF,FFFF,n=32
拿走不謝漾橙!
什么杆融? 你還想知道原理?那就繼續(xù)往下看霜运,其實(shí)我也是瞎弄的脾歇。。淘捡。
主體IF語(yǔ)句用來(lái)控制十六進(jìn)制數(shù)最高bit是否是1的藕各,HEX2DEC(LEFT(num,1))<8這個(gè)公式即判斷num的最左的數(shù)是否<8,如果小于8焦除,那么這個(gè)數(shù)是正數(shù)激况,直接轉(zhuǎn)換就行HEX2DEC(num),如果>=8膘魄,那么就用這個(gè)公式:-HEX2DEC(DEC2HEX(2n-HEX2DEC(num),n/4))乌逐,其中2n-HEX2DEC(num)用于計(jì)算num的補(bǔ)碼,然后再用DEC2HEX()將補(bǔ)碼轉(zhuǎn)換成我們所需的位數(shù)的十六進(jìn)制數(shù)瓣距,再再用HEX2DEC轉(zhuǎn)換成十進(jìn)制數(shù)黔帕,取負(fù)號(hào),大功告成蹈丸。