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

c++ 十进制、十六进制和BCD的相互转换的更多相关文章

  1. c++ 十进制、十六进制和BCD的相互转换,与打印printf,与函数调用

    转载: https://blog.csdn.net/sjhuangx/article/details/49947179   c++ 十进制.十六进制和BCD的相互转换 https://blog.csd ...

  2. ASCII码表(二进制 十进制 十六进制)

    css里,允许使用转义字符\+ascii16进制形式; 例如: e的ascii 16进制是65,我们就写为\65 expression -> expr\65ssion 二进制 十进制 十六进制 ...

  3. iOS十六进制和字符串的相互转换

    转换代码,崩溃日志有些是十六进制 NSString *dictString = [dict JSONFragment];//组合成的 dictString==={"content" ...

  4. Delphi进制转换(二进制/十进制/十六进制)

    http://www.cnblogs.com/ywangzi/archive/2012/12/12/2815219.html   Delphi进制转换(二进制/十进制/十六进制)  2009-11-2 ...

  5. Python 进制转换 二进制 八进制 十进制 十六进制

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...

  6. Python进制转换(二进制/八进制/十进制/十六进制)

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义 ba ...

  7. Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)

    /** * 数据类型转换工具类 * @author cyf * */ public class NumConvertUtil{ /** * bytes 转16进制字符串 * @param bArray ...

  8. delphi 十进制十六进制转换

    delphi有提供十进制转换成十六进制的函数: IntToStr();   返回值为String // 十进制转十六进制 var i: integer; str: string; begin i := ...

  9. C++ 进制转换 十进制十六进制八进制二进制相互转换

    思路: 下面我把相互转换的所有类型都写出来了.实际上都是通过十进制中转的,这样比较简单,写出X进制转成十进制和从十进制转成X进制的两份代码直接拷贝就完成了剩余的部分.哦,对,自己封装了一个charTo ...

随机推荐

  1. jmeter录制对于ip代理会失效

    jmeter对于ip代理会失效,ip不能走代理,只有域名可以,因此如果需要用jmeter录制ip代理的请求,需要配置hosts访问,将ip转换成域名 如访问http://127.0.0.1:8080/ ...

  2. Python 3标准库第一天讲解总结

    一.很多知识自己没有理解透: 二.课件准备不足: 三.第一次讲解有点紧张: 四.口才也不是很好,很多有断片的情况: 五.SB式的坚持:

  3. NOIP2016提高A组五校联考2总结

    第一题用组合数各种乱搞,其恶心程度不一般.搞了很久才调对,比赛上出了一点bug,只拿了30分. 第二题我乱搞得出个错误的结论,本来自信满满60分,结果爆零了. 第三题,树形dp,在一开始的时候想到了, ...

  4. C#与JAVA的互通

    C#与JAVA的互通 https://blog.csdn.net/sinat_35165183/article/details/68936910

  5. nuget push 程序包到nuget服务器时报错 406 (Not Acceptable)

    1.在window服务器上部署nuget服务器时,发布包时出现请求报错 406 (Not Acceptable) 验证用户名.密码正确的情况下,还是出现上面错误.后面跟踪服务器日志,发现window\ ...

  6. sh_08_打印分隔线

    sh_08_打印分隔线 def print_line(char, times): print(char * times) print_line("hi ", 40)

  7. 02-scrapy的cmdline命令

    1.启动爬虫的命令为: scrapy crawl spidername(爬虫名) 2.我们还可以通过下述方式来启动爬虫 步骤一:创建一个.py文件.startspider.py(这里文件的名称可以自己 ...

  8. 新手 Redis 配置笔记(windows),附下载地址

    1.关于安装文件的选择 安装的时候应该下载免安装版,安装版虽然一路下一步就可以了,但是,当要修改配置文件的时候,特别痛苦,搜了两个小时,居然没有找到如何用命令修改配置文件,开放远程连接.所以对于第一次 ...

  9. Oracle-RAC sysdate和current_date时间不一致,导致客户端连接时间延迟

    [oracle@oracle-db1 ~]$ dateTue Oct 10 14:20:56 CST 2017[oracle@oracle-db1 ~]$ cat /etc/sysconfig/clo ...

  10. 修改docker下mysql配置

    1.在/home/smile/docker/mysql/config/目录下增加一个文件 my.cnf # Copyright (c) , Oracle and/or its affiliates. ...