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. 《SaltStack技术入门与实践》—— Peer

    Peer 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Peer组件是SaltStack中Minion向Master发布任务的一个组件,使用Peer ...

  2. 两个惊艳的python库:tqdm和retry

    转载到请包括本文地址:http://spaces.ac.cn/archives/3902/ Python基本是我目前工作.计算.数据挖掘的唯一编程语言(除了符号计算用Mathematica外).当然, ...

  3. 对flex深入研究一点

    flex顶层设计 1.在任何流动的方向上(包括上下左右)都能进行良好的布局 2.可以以逆序 或者 以任意顺序排列布局 3.可以线性的沿着主轴一字排开 或者 沿着侧轴换行排列 4.可以弹性的在任意的容器 ...

  4. go语言系列--输出正弦函数

    实验所用到的标准库和包 库与包之间的理解可以类比成:数据库种的库和表 库名 作用 image 常见图形格式的访问及生成 log 日志记录库 math 数学库 os 操作系统平台不依赖平台操作封装 查看 ...

  5. BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2716 怎么KD树跑得都那么快啊..我写的CDQ分治被暴虐 做四遍CDQ分治,每次求一个 ...

  6. es之文档更新过程中并发冲突问题

    1:乐观锁控制 ES是分布式的,也是异步并发的,我们的复制请求是并行发送的:这就意味着请求到达目的地的顺序是不可控制的,是乱序的: 如果是乱序的方式,很有可能出现这样的一个问题,新version的文档 ...

  7. sqli-labs(25a)

    0X01 看见bind好像是盲注的意思 尝试闭合语句 加入’ 报错  双引号也报错 难道是不许要闭合的? 我们尝试一下 发现过滤了and ?id= and = 那么我们构造 ?id= aandnd = ...

  8. intellij idea中去除@Autowired注入对象的红色波浪线提示

    idea中通过@Autowired注入的对象一直有下划线提示. 解决:改变@Autowired的检查级别即可. 快捷键:Ctrl+Alt+s,进入idea设置界面,输入inspections检索

  9. 不知道Java类文件结构的同学,看这篇文章就够了

    一.前言 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步.经过多年的发展,目前的计算机仍然只能识别0和1,但是由于近10年内虚拟机以及大量建立在虚拟机之上的程 ...

  10. 139、TensorFlow Serving 实现模型的部署(二) TextCnn文本分类模型

    昨晚终于实现了Tensorflow模型的部署 使用TensorFlow Serving 1.使用Docker 获取Tensorflow Serving的镜像,Docker在国内的需要将镜像的Repos ...