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