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. return rslt;
  50. }
  51. /////////////////////////////////////////////////////////
  52. //
  53. //功能:十进制转十六进制
  54. //
  55. //输入:int dec                     待转换的十进制数据
  56. //      int length                  转换后的十六进制数据长度
  57. //
  58. //输出:unsigned char *hex          转换后的十六进制数据
  59. //
  60. //返回:0    success
  61. //
  62. //思路:原理同十六进制转十进制
  63. //////////////////////////////////////////////////////////
  64. int DectoHex(int dec, unsigned char *hex, int length)
  65. {
  66. int i;
  67. for (i = length - 1; i >= 0; i--)
  68. {
  69. hex[i] = (dec % 256) & 0xFF;
  70. dec /= 256;
  71. }
  72. return 0;
  73. }
  74. /////////////////////////////////////////////////////////
  75. //
  76. //功能:求权
  77. //
  78. //输入:int base                    进制基数
  79. //      int times                   权级数
  80. //
  81. //输出:
  82. //
  83. //返回:unsigned long               当前数据位的权
  84. //
  85. //////////////////////////////////////////////////////////
  86. unsigned long power(int base, int times)
  87. {
  88. int i;
  89. unsigned long rslt = 1;
  90. for (i = 0; i < times; i++)
  91. rslt *= base;
  92. return rslt;
  93. }
  94. /////////////////////////////////////////////////////////
  95. //
  96. //功能:BCD转10进制
  97. //
  98. //输入:const unsigned char *bcd     待转换的BCD码
  99. //      int length                   BCD码数据长度
  100. //
  101. //输出:
  102. //
  103. //返回:unsigned long               当前数据位的权
  104. //
  105. //思路:压缩BCD码一个字符所表示的十进制数据范围为0 ~ 99,进制为100
  106. //      先求每个字符所表示的十进制值,然后乘以权
  107. //////////////////////////////////////////////////////////
  108. unsigned long  BCDtoDec(const unsigned char *bcd, int length)
  109. {
  110. int i, tmp;
  111. unsigned long dec = 0;
  112. for (i = 0; i < length; i++)
  113. {
  114. tmp = ((bcd[i] >> 4) & 0x0F) * 10 + (bcd[i] & 0x0F);
  115. dec += tmp * power(100, length - 1 - i);
  116. }
  117. return dec;
  118. }
  119. /////////////////////////////////////////////////////////
  120. //
  121. //功能:十进制转BCD码
  122. //
  123. //输入:int Dec                      待转换的十进制数据
  124. //      int length                   BCD码数据长度
  125. //
  126. //输出:unsigned char *Bcd           转换后的BCD码
  127. //
  128. //返回:0  success
  129. //
  130. //思路:原理同BCD码转十进制
  131. //
  132. //////////////////////////////////////////////////////////
  133. int DectoBCD(int Dec, unsigned char *Bcd, int length)
  134. {
  135. int i;
  136. int temp;
  137. for (i = length - 1; i >= 0; i--)
  138. {
  139. temp = Dec % 100;
  140. Bcd[i] = ((temp / 10) << 4) + ((temp % 10) & 0x0F);
  141. Dec /= 100;
  142. }
  143. return 0;
  144. }
  145. //main函数
  146. int main(int argc, char** argv)
  147. {
  148. //BCD码转十进制
  149. unsigned char BCD[3] = { 0x00, 0x53, 0x20 };
  150. int dec_bcd = BCDtoDec(BCD, 3);
  151. cout << "dec_bcd : " << dec_bcd << endl;
  152. //十进制转BCD码
  153. unsigned char tmp_bff[3] = "";
  154. DectoBCD(dec_bcd, tmp_bff, 3);
  155. for (int i = 0; i < 3; ++i)
  156. {
  157. //cout << "tmp_buff[" << i << "]: " << tmp_bff[i] << endl;
  158. printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]);
  159. }
  160. cout << endl << endl;
  161. //十六进制转十进制
  162. unsigned char Hex[3] = { 0x00, 0x53, 0x20 };
  163. int dec_hex = HextoDec(Hex, 3);
  164. cout << "dec_hex: " << dec_hex << endl;
  165. //十进制转十六进制
  166. unsigned char hex_bff[3] = "";
  167. DectoHex(dec_hex, hex_bff, 3);
  168. for (int i = 0; i < 3; ++i)
  169. {
  170. printf("hex_bff[%d] = 0x%02X\n", i, hex_bff[i]);
  171. }
  172. system("pause");
  173. return 0;
  174. }
 
 
05-26 20:29
查看更多