BCD碼簡介及其與十進制數(shù)字字符串之間的轉(zhuǎn)換
大家都知道在計算機中,數(shù)據(jù)的常用編碼格式有二進制、八進制、十進制和十六進制等,這些編碼格式之間可以相互轉(zhuǎn)換。在電力通信協(xié)議中,很多數(shù)據(jù)都是用BCD格式來編碼的,這些數(shù)據(jù)需要轉(zhuǎn)換為普通的十進制數(shù)字串。本文首先對BCD碼進行簡單的介紹,然后用代碼演示它與十進制數(shù)字字符串之間的轉(zhuǎn)換。
BCD碼簡介
BCD碼(Binary Coded Decimal)是一種二進制的數(shù)字編碼形式,它是用二進制編碼的十進制代碼。這種編碼形式利用四個位來儲存一個十進制數(shù),使得二進制和十進制之間的轉(zhuǎn)換得以快捷地進行。常見的BCD編碼有8421BCD碼,2421BCD碼和余3碼,其中又以8421BCD碼最為常見。本文介紹8421BCD碼與十進制數(shù)字字符串之間的轉(zhuǎn)換。
十進制數(shù)與8421BCD碼的對應(yīng)關(guān)系如下表所示:
從上表中,我們也可以看出十進制數(shù)與8421BCD碼的對應(yīng)關(guān)系:兩個字節(jié)的十進制數(shù)字串可以用一個字節(jié)的8421BCD碼來表示。例如,數(shù)字字符串“19”是兩個字節(jié),它對應(yīng)的8421BCD碼為“00011001”(只有一個字節(jié)),其中高四位的“0001“代表十進制的“1“,低四位的“1001“代表十進制的“9“。
十進制數(shù)字串與8421BCD碼之間的轉(zhuǎn)換
根據(jù)前面對BCD碼的介紹,我們可以編寫代碼分別實現(xiàn)BCD碼轉(zhuǎn)換為十進制數(shù)字串和十進制數(shù)字串轉(zhuǎn)換為BCD碼。具體的代碼已經(jīng)提交到了GitHub上,歡迎下載閱讀:https://github.com/zhouzxi/BCD2String。其中,BCD2String函數(shù)用于將8421BCD碼轉(zhuǎn)換為十進制數(shù)字串,String2BCD函數(shù)用于將十進制數(shù)字串轉(zhuǎn)換為8421BCD碼。
本程序是運行在Linux系統(tǒng)上的,大家可以使用“gcc -g -o BCD2String BCD2String.c”命令對代碼進行編譯,之后運行“./BCD2String”命令,結(jié)果如下:
- $ ./BCD2String
- szDigitBuf=7539!
- szBCDData=19!
- szDigitBuf=19!
大家可以根據(jù)運行的結(jié)果來閱讀程序,看一下8421BCD碼與十進制數(shù)字串之間的轉(zhuǎn)換原理。
【本文是51CTO專欄作者周兆熊的原創(chuàng)文章,作者微信公眾號:周氏邏輯(logiczhou)】