如何將BCD碼轉(zhuǎn)換成10進(jìn)制碼
今天有人在問我BCD碼如何轉(zhuǎn)換成10進(jìn)制碼的問題,其實(shí)很簡(jiǎn)單
BCD 的表示法是 用4個(gè)二進(jìn)制位來表示 一個(gè)十進(jìn)制位,也就是一個(gè)字節(jié)能夠表示2個(gè)十進(jìn)制數(shù)位,這是一種壓縮的十進(jìn)制表示方式,應(yīng)用很廣,最常見的就是CMOS里的時(shí)間存放格式就是BCD碼格式,更具體的表示方法大家可以去百度一下就知道了不過其實(shí)知道我上面說的就差不多了。
明白了BCD是怎么表示后轉(zhuǎn)換也就容易了,低4位和高4位分別轉(zhuǎn)換然后合并起來就是了!
如15用BCD碼表示為 0001 0101
低四位的值就是實(shí)現(xiàn)十進(jìn)制數(shù)的低四,高4位就是高四位的值,這樣我們有很高效的轉(zhuǎn)換方法:低四位+高四位×10 (上面是2位十進(jìn)制數(shù)的)
用C語(yǔ)言表達(dá)一下可能更能明白我上面說的意思
#include
int main(void)
{
/** 15用BCD碼表示為 0001 0101 **/
int bcd = 0x15;
int dec;
dec = (bcd & 15) + ((bcd>>4) * 10);
printf("%dn",dec);
return 0;
}
所以實(shí)際轉(zhuǎn)換可以定義成一個(gè)宏
#define BCDTODEC(bcd)
如
#include
#define BCDTODEC(bcd) ((bcd) = ((bcd) & 15) + ((bcd)>>4) * 10)
int main(void)
{
/** 15用BCD碼表示為 0001 0101 **/
int bcd = 0x15;
BCDTODEC(bcd);
printf("%dn",bcd);
return 0;
}