關於BCD編碼和解碼

(1)BCD碼(二到十進制編碼)
人們通常習慣使用十進制數,而計算機內部多采用二進制表示和處理數值數據,
因此在計算機輸入和輸出數據時,就要進行由十進制到二進制的轉換處理。


把十進制數的每一位分別寫成二進制形式的編碼,稱爲二進制編碼的十進制數,
即二到十進制編碼或BCD(Binary Coded Decimal)編碼。


BCD碼編碼方法很多,通常採用8421編碼,這種編碼方法最自然簡單。
其方法使用四位二進制數表示一位十進制數,從左到右每一位對應的權分別是
23、22、21、20,即8、4、2、1。例如十進制數1975的8421碼可以這樣得出


1975(D)=0001 1001 0111 0101(BCD)


用四位二進制表示一位十進制會多出6種狀態,這些多餘狀態碼稱爲BCD碼中的非法碼。
BCD碼與二進制之間的轉換不是直接進行的,
當需要將BCD碼轉換成二進制碼時,要先將BCD碼轉換成十進制碼,然後再轉換成二進制碼;
當需要將二進制轉換成BCD碼時,要先將二進制轉換成十進制碼,然後再轉換成BCD碼。


編碼過程,將數字69進行BCD編碼(注:BCD編碼低位在前,後面將不再註釋)。


1.       將6,9分別轉換成二進制表示:6(00000110)9(00001001),大家可以看到,最大的數字9也只要4個位,在傳輸過程中白白浪費了4個位;


2.       將69合併爲一個字節,分別取6,9二進制編碼的低4位,按照低位在前的原則,將9的低四位放前面6的低四位放後面得出新的字節二進制編碼是10010110;


3.       完成編碼過程,69的BCD編碼結果爲10010110。


解碼過程:將69的BCD碼10010110進行解碼。


1.       將10010110的高4位與低4位拆分開,得到兩個二進制數1001和0110;


2.       分別將1001和0110的前面補充4位0000得到兩個8位的二進制數00001001,00000110;


3.       因爲編碼時低位在前,所以我們將兩個二進制數編排順序爲00000110 000010001;




C#版代碼實現:


int x=97;  ///要對整數97BCD編碼
   byte m=(((byte)7)<<4)+(((byte)9));
   //得到的m即爲數字97和BCD碼字節表現形式


   string bs="";
   bs=(((byte)(m<<4))>>4)).ToString()+"+"+(m>>4).ToString();


  bs即爲從BCD碼解得的字符串
發佈了52 篇原創文章 · 獲贊 7 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章