c++ 十進制、十六進制和BCD的相互轉換



[cpp]
  view plain  copy
 
  1. #include <stdio.h>   
  2. #include <string.h>  
  3. #include <iostream>  
  4. using namespace std;  
  5. /////////////////////////////////////////////////////   
  6. //   
  7. //功能:二進制取反   
  8. //   
  9. //輸入:const unsigned char *src  二進制數據   
  10. //      int length                待轉換的二進制數據長度   
  11. //   
  12. //輸出:unsigned char *dst        取反后的二進制數據   
  13. //   
  14. //返回:0    success   
  15. //   
  16. //////////////////////////////////////////////////////   
  17. int convert(unsigned char *dst, const unsigned char *src, int length)  
  18. {  
  19.     int i;  
  20.     for (i = 0; i < length; i++)  
  21.     {  
  22.         dst[i] = src[i] ^ 0xFF;  
  23.     }  
  24.     return 0;  
  25. }  
  26. //////////////////////////////////////////////////////////   
  27. //   
  28. //功能:十六進制轉為十進制   
  29. //   
  30. //輸入:const unsigned char *hex         待轉換的十六進制數據   
  31. //      int length                       十六進制數據長度   
  32. //   
  33. //輸出:   
  34. //   
  35. //返回:int  rslt                        轉換后的十進制數據   
  36. //   
  37. //思路:十六進制每個字符位所表示的十進制數的范圍是0 ~255,進制為256   
  38. //      左移8位(<<8)等價乘以256   
  39. //   
  40. /////////////////////////////////////////////////////////   
  41. unsigned long HextoDec(const unsigned char *hex, int length)  
  42. {  
  43.     int i;  
  44.     unsigned long rslt = 0;  
  45.     for (i = 0; i < length; i++)  
  46.     {  
  47.         rslt += (unsigned long)(hex[i]) << (8 * (length - 1 - i));  
  48.   
  49.     }  
  50.     return rslt;  
  51. }  
  52.   
  53. /////////////////////////////////////////////////////////   
  54. //   
  55. //功能:十進制轉十六進制   
  56. //   
  57. //輸入:int dec                     待轉換的十進制數據   
  58. //      int length                  轉換后的十六進制數據長度   
  59. //   
  60. //輸出:unsigned char *hex          轉換后的十六進制數據   
  61. //   
  62. //返回:0    success   
  63. //   
  64. //思路:原理同十六進制轉十進制   
  65. //////////////////////////////////////////////////////////   
  66. int DectoHex(int dec, unsigned char *hex, int length)  
  67. {  
  68.     int i;  
  69.     for (i = length - 1; i >= 0; i--)  
  70.     {  
  71.         hex[i] = (dec % 256) & 0xFF;  
  72.         dec /= 256;  
  73.     }  
  74.     return 0;  
  75. }  
  76. /////////////////////////////////////////////////////////   
  77. //   
  78. //功能:求權   
  79. //   
  80. //輸入:int base                    進制基數   
  81. //      int times                   權級數   
  82. //   
  83. //輸出:   
  84. //   
  85. //返回:unsigned long               當前數據位的權   
  86. //   
  87. //////////////////////////////////////////////////////////   
  88. unsigned long power(int base, int times)  
  89. {  
  90.     int i;  
  91.     unsigned long rslt = 1;  
  92.     for (i = 0; i < times; i++)  
  93.         rslt *= base;  
  94.     return rslt;  
  95. }  
  96. /////////////////////////////////////////////////////////   
  97. //   
  98. //功能:BCD轉10進制   
  99. //   
  100. //輸入:const unsigned char *bcd     待轉換的BCD碼   
  101. //      int length                   BCD碼數據長度   
  102. //   
  103. //輸出:   
  104. //   
  105. //返回:unsigned long               當前數據位的權   
  106. //   
  107. //思路:壓縮BCD碼一個字符所表示的十進制數據范圍為0 ~ 99,進制為100   
  108. //      先求每個字符所表示的十進制值,然后乘以權   
  109. //////////////////////////////////////////////////////////   
  110. unsigned long  BCDtoDec(const unsigned char *bcd, int length)  
  111. {  
  112.     int i, tmp;  
  113.     unsigned long dec = 0;  
  114.     for (i = 0; i < length; i++)  
  115.     {  
  116.         tmp = ((bcd[i] >> 4) & 0x0F) * 10 + (bcd[i] & 0x0F);  
  117.         dec += tmp * power(100, length - 1 - i);  
  118.     }  
  119.     return dec;  
  120. }  
  121. /////////////////////////////////////////////////////////   
  122. //   
  123. //功能:十進制轉BCD碼   
  124. //   
  125. //輸入:int Dec                      待轉換的十進制數據   
  126. //      int length                   BCD碼數據長度   
  127. //   
  128. //輸出:unsigned char *Bcd           轉換后的BCD碼   
  129. //   
  130. //返回:0  success   
  131. //   
  132. //思路:原理同BCD碼轉十進制   
  133. //   
  134. //////////////////////////////////////////////////////////   
  135. int DectoBCD(int Dec, unsigned char *Bcd, int length)  
  136. {  
  137.     int i;  
  138.     int temp;  
  139.     for (i = length - 1; i >= 0; i--)  
  140.     {  
  141.         temp = Dec % 100;  
  142.         Bcd[i] = ((temp / 10) << 4) + ((temp % 10) & 0x0F);  
  143.         Dec /= 100;  
  144.     }  
  145.     return 0;  
  146. }  
  147. //main函數  
  148. int main(int argc, char** argv)  
  149. {  
  150.     //BCD碼轉十進制   
  151.     unsigned char BCD[3] = { 0x00, 0x53, 0x20 };  
  152.     int dec_bcd = BCDtoDec(BCD, 3);  
  153.     cout << "dec_bcd : " << dec_bcd << endl;  
  154.   
  155.     //十進制轉BCD碼  
  156.     unsigned char tmp_bff[3] = "";  
  157.     DectoBCD(dec_bcd, tmp_bff, 3);  
  158.     for (int i = 0; i < 3; ++i)  
  159.     {  
  160.         //cout << "tmp_buff[" << i << "]: " << tmp_bff[i] << endl;  
  161.         printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]);  
  162.     }  
  163.   
  164.     cout << endl << endl;  
  165.     //十六進制轉十進制  
  166.     unsigned char Hex[3] = { 0x00, 0x53, 0x20 };  
  167.     int dec_hex = HextoDec(Hex, 3);  
  168.     cout << "dec_hex: " << dec_hex << endl;  
  169.   
  170.     //十進制轉十六進制  
  171.     unsigned char hex_bff[3] = "";  
  172.     DectoHex(dec_hex, hex_bff, 3);  
  173.     for (int i = 0; i < 3; ++i)  
  174.     {  
  175.         printf("hex_bff[%d] = 0x%02X\n", i, hex_bff[i]);  
  176.     }  
  177.   
  178.     system("pause");  
  179.     return 0;  
  180. }  


 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM