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. }  

 

 
 

原文链接: https://www.cnblogs.com/daochong/p/6532795.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++ 十进制、十六进制和BCD的相互转换

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/250586

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午4:37
下一篇 2023年2月14日 上午4:37

相关推荐