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. redux 中的 redux-thunk(中间件)

    前言 空闲时间把redux中的redux-thunk中间件回顾下,因为以前没有写博客的习惯,都怪自己太年轻,好了 其实:      redux的核心概念其实很简单:将需要修改的state都存入到sto ...

  2. sourceTree 添加 ssh key 方法

    1.使用 git 客户的生成公私钥:id_rsa.id_rsa.pub 1.1设置Git的user name和email: $ git config --global user.name " ...

  3. Python 3标准库课件第二章

    整理第一章我又觉得烦,我就看第二章了,灰头土脸的,第二章一.如列表(list).元组(tuple).字典(dict).集合(set)二.2.1 enum:枚举类型 enum模块定义了一个提供迭代和比较 ...

  4. 【windows&flask】flask通过service自动运行

    最近在学习在windows平台用flask框架提供Restful API服务,需要使得flask的windows应用能够开机自动运行,并且后台运行,所以通过service来实现. 首先尝试的是在自己派 ...

  5. 安装caffe碰到的坑(各种.so未找到)

    ./include/caffe/common.hpp:4:32: fatal error: boost/shared_ptr.hpp: 没有那个文件或目录 所有类似于上面的错误,都可以用如下格式来解决 ...

  6. TeamViewer的替代品:realVNC

    TeamViewer的替代品:realVNC official web: realvnc: https://www.realvnc.com/ steps: 在需要被控制的PC上装上realVNC的服务 ...

  7. Windows 环境上域名配置

    1.Hosts位置 C:\Windows\System32\drivers\etc\hosts 2.Hosts内容 # Copyright (c) 1993-2009 Microsoft Corp. ...

  8. vue学习-day03(动画,组件)

    目录: 1.品牌列表-从数据库获取列表    2.品牌列表-完成添加功能    3.品牌列表-完成删除功能    4.品牌列表-全局配置数据接口的根域名    5.品牌列表-全局配置emulateJS ...

  9. ROM和RAM的内存详细说明

    1.首先是ROM 的读取是需要提前两个地址的读取,所以要想读取0地址的数据,你需要给地址是2 2.关于宽度,深度的计算 假设我们要存取如下取模的数据,该模的设置口语描述为:这是显示的2个字节,其中一个 ...

  10. React Native中集成友盟社会化分享-----童叟无欺

    1.下载所需的jar,下载地址https://developer.umeng.com/sdk/reactnative?spm=a211g2.211692.0.0.28967d238GW6mC 2.将以 ...