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. ZROI 19.08.06模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. 今天正睿又倒闭了,从删库到跑路. 天祺鸽鸽txdy! A "不要像个小学生一样一分钟就上来问东西."--蔡老板 虽 ...

  2. ps制作雾的效果

    制作雾的效果 方法一: 新建图层,将前景色设置为白色,背景色为黑色(因为雾的颜色是根据前景色决定的,也可根据这个原理制作火焰效果) 选择滤镜->渲染->云彩(也可选择其他效果的云彩) (选 ...

  3. CodeForces-598D(BFS,染色)

    链接: https://vjudge.net/problem/CodeForces-598D 题意: Igor is in the museum and he wants to see as many ...

  4. 一个不错的vue项目

    项目演示: https://www.xiaohuochai.cc 项目地址:https://github.com/littlematch0123/blog-client

  5. 【leetcode】1186. Maximum Subarray Sum with One Deletion

    题目如下: Given an array of integers, return the maximum sum for a non-empty subarray (contiguous elemen ...

  6. 拉链法解决hashtable冲突问题

    拉链法解决冲突.拉链法解决冲突的做法是将所有的相同Hash值的key放在一个链表中,比如key3和key14在hash之后都是0,那么在数组的键为0的地方存储这两个值,形式是链表.如果不能理解我的文字 ...

  7. Android使用init.rc触发脚本实现隐藏内置应用

    [实现逻辑] 通过在property_service.c中设置标志位,在设置中实现接口改变标志位, 使用init.rc中声明的服务来侦听标志位的变化,显式启动声明的服务,执行对应的脚本,把应用后缀从a ...

  8. 将DVD.iso 挂载到虚拟机

    将DVD.iso挂载到虚机之后,默认设备名是/dev/sr0 挂载DVD.iso文件到/mnt. 操作: mount /dev/sr0 /mnt 查看: ll /mnt

  9. JMS学习二(简单的ActiveMQ实例)

    下载安装ActiveMQ服务,下载地址当然可以去官网下载 http://activemq.apache.org/download-archives.html ActiveMQ安装很简单,下载解压后到b ...

  10. [CSP-S模拟测试]:Cicada拿衣服(暴力+乱搞)

    题目传送门(内部题94) 输入格式 第一行两个整数$n,k$,代表衣服的数量和阈值. 接下来一行$n$个数,第$i$个数$a_i$表示每件衣服的愉悦值. 输出格式 输出一行$n$个数,第$i$个数为$ ...