人們通常習慣使用十進制數,而計算機內部多采用二進制表示和處理數值數據,
因此在計算機輸入和輸出數據時,就要進行由十進制到二進制的轉換處理。
把十進制數的每一位分別寫成二進制形式的編碼,稱爲二進制編碼的十進制數,
即二到十進制編碼或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碼解得的字符串