• 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 ", 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 ", i, hex_bff[i]);  
    176.     }  
    177.   
    178.     system("pause");  
    179.     return 0;  
    180. }  


     
     
  • 相关阅读:
    caseStudy-20181216-Kafka(xxx)集群故障&解决办法
    caseStudy-20190312 xxx kafka集群因文件描述符超阀值引起集群不可用
    Kafka客户端二次封装扩展总体设计
    2018年工作规划-Kafka方向OKR
    针对Kafka的centos系统参数优化
    脚本kafka-configs.sh用法解析
    Kafka动态配置实现原理解析
    动态配置实现原理解析参考资料
    Topics类型配置
    Brokers类型配置
  • 原文地址:https://www.cnblogs.com/daochong/p/6532795.html
Copyright © 2020-2023  润新知