在做嵌入式软件的设计中,经常会遇到十六进制、BCD码与十进制之间的转换,最近做M1卡的应用中,涉及了大量的十六进制、BCD码与十进制之间的转换。笔者通过对BCD码、十六进制 权的理解,轻松的实现了他们之间的互换。

#include

#include

/

//

//功能:二进制取反

//

//输入:const unsigned char *src  二进制数据

//      int length                待转换的二进制数据长度

//

//输出:unsigned char *dst        取反后的二进制数据

//

//返回:0    success

//

//

int convert(unsigned char *dst, const unsigned char *src, int length)

{

int i;

for(i=0; i

{

dst[i] = src[i]^0xFF;

}

return 0;

}

//

//

//功能:十六进制转为十进制

//

//输入:const unsigned char *hex         待转换的十六进制数据

//      int length                       十六进制数据长度

//

//输出:

//

//返回:int  rslt                        转换后的十进制数据

//

//思路:十六进制每个字符位所表示的十进制数的范围是0 ~255,进制为256

//      左移8位(<<8)等价乘以256

//

/

unsigned long HextoDec(const unsigned char *hex, int length)

{

int i;

unsigned long rslt = 0;

for(i=0; i

{

rslt += (unsigned long)(hex[i])<

}

return rslt;

}

/

//

//功能:十进制转十六进制

//

//输入:int dec                     待转换的十进制数据

//      int length                  转换后的十六进制数据长度

//

//输出:unsigned char *hex          转换后的十六进制数据

//

//返回:0    success

//

//思路:原理同十六进制转十进制

//

int DectoHex(int dec, unsigned char *hex, int length)

{

int i;

for(i=length-1; i>=0; i--)

{

hex[i] = (dec%256)&0xFF;

dec /= 256;

}

return 0;

}

/

//

//功能:求权

//

//输入:int base                    进制基数

//      int times                   权级数

//

//输出:

//

//返回:unsigned long               当前数据位的权

//

//

unsigned long power(int base, int times)

{

int i;

unsigned long rslt = 1;

for(i=0; i

rslt *= base;

return rslt;

}

/

//

//功能:BCD转10进制

//

//输入:const unsigned char *bcd     待转换的BCD码

//      int length                   BCD码数据长度

//

//输出:

//

//返回:unsigned long               当前数据位的权

//

//思路:压缩BCD码一个字符所表示的十进制数据范围为0 ~ 99,进制为100

//      先求每个字符所表示的十进制值,然后乘以权

//

unsigned long  BCDtoDec(const unsigned char *bcd, int length)

{

int i, tmp;

unsigned long dec = 0;

for(i=0; i

{

tmp = ((bcd[i]>>4)&0x0F)*10 + (bcd[i]&0x0F);

dec += tmp * power(100, length-1-i);

}

return dec;

}

/

//

//功能:十进制转BCD码

//

//输入:int Dec                      待转换的十进制数据

//      int length                   BCD码数据长度

//

//输出:unsigned char *Bcd           转换后的BCD码

//

//返回:0  success

//

//思路:原理同BCD码转十进制

//

//

int DectoBCD(int Dec, unsigned char *Bcd, int length)

{

int i;

int temp;

for(i=length-1; i>=0; i--)

{

temp = Dec%100;

Bcd[i] = ((temp/10)<<4) + ((temp%10) & 0x0F);

Dec /= 100;

}

return 0;

}

int main()

{

register int i;

unsigned char tmp_bff[12] = "";

//十六进制转十进制

unsigned char HEX[4] = {0x34, 0xFE, 0x3E, 0xFF};

unsigned long dec_hex = 0;

dec_hex = HextoDec(HEX, 4);

printf("dec_hex = %d\n", dec_hex);

//十进制转十六进制

DectoHex(dec_hex, tmp_bff, 4);

for(i=0; i<5; i++)

{

printf("tmp_bff[%d] = 0x%02X\n",i, tmp_bff[i]);

}

//BCD码转十进制

unsigned long dec_bcd = 0;

unsigned char BCD[4] = {0x98, 0x23, 0x45, 0x78};

dec_bcd = BCDtoDec(BCD, 4);

printf("dec_bcd = %d\n", dec_bcd);

//十进制转BCD码

DectoBCD(dec_bcd, tmp_bff, 4);

for(i=0; i<5; i++)

{

printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]);

}

getchar();

}

c++ 转bcd码_BCD码、十六进制与十进制互转相关推荐

  1. C# 进制转换(二进制、十六进制、十进制互转) .

    C# 进制转换(二进制.十六进制.十进制互转) 由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示 例如: 二进制: 1010 表示为 字符串:"1010"  ...

  2. C# 进制转换(二进制、十六进制、十进制互转)

    C# 进制转换(二进制.十六进制.十进制互转) 二进制转十进制数 string i = "0010"; Console.WriteLine(Convert.ToInt32(i,2) ...

  3. c++ 转bcd码_BCD码转10进制字符串(C#、C++)

    C# /// /// 将bcd字节数组转为10进制字符串 /// /// bcd码字节数组 /// 返回转换后的10进制字符串 public string BCDCodeToDecimalString ...

  4. python十六进制和十进制互转

    写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串.(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串. 输出描述: 输出该数值的十进制字符串. 示例1 输入 0xA 输出 ...

  5. c语言十六转十进制,C语言 · 十六进制转十进制

    问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 样例输入 FFFF 样例输出 6 ...

  6. linux c十六进制转十进制函数,用Linux/Unix命令把十六进制转换成十进制(转)

    那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了. 先列两种简单的方法: 1) echo 自己就能 ...

  7. 整型和bcd的对应关系_BCD码与整数之间的转换

    1.BCD码的概念 BCD码 意为 "二进制编码的十进制数".BCD码是一种编码方式,是以二进制数对十进制数字的编码,每四位二进制码表示一位十进制数,并因为16进制的优势,改用十六 ...

  8. bcd转ascii码 流程图_BCD码转换成二进制和ASCII码

    首先得知道什么是BCD码,可以看下百度,基本定义已经讲清楚了,百度链接:BCD码--百度百科:这里要说的也是最常用的一种BCD码:8421码.本文规定若没有特殊说明时,各个数值只会是十进制数.二进制数 ...

  9. 数制和码制(数制的转换的方法,BCD码<8421,2421,5421,余三码>,格雷码,原码,反码,补码,定点数和浮点数)

    目录 1.数制的转换 1)二,八,十六进制进制转十进制 加权系数求和法 2)十进制转二,八,十六进制 除基取余法(短除法) 减权定位法 3)二,八,十六进制的相互转换 2.BCD码 3.格雷码 4.原 ...

最新文章

  1. VS编译器如何单步调试
  2. 002_ZooKeeper安装配置
  3. twilio_15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
  4. 【OpenCV 例程200篇】25. 图像的平移
  5. 太耿直了!自家总监评拯救者Y90的640GB超大存储:用来吹牛的
  6. C++ 基础 - woaidongmao - C++博客 good 量产
  7. Output Arcade for Mac - 新型音频合成器
  8. 桌面虚拟化与带宽,延迟之间的关系
  9. Intellij IDEA 2019 最新优化配置
  10. 如何检测android手机是否支持3g网络或者4g网络 源码,iOS中怎么判断当前网络环境是2G/3G/4G/5G/WiFi...
  11. 高斯-勒让德求积公式及Matlab实现
  12. 互联网公司的监控运维
  13. Python Socket网络编程(一)初识Socket和Socket初步使用
  14. python -flask简介
  15. c语言编程显示未定义的引用,c – 链接时奇怪的未定义引用
  16. mysql的四表查询_Mysql经典四表查询
  17. 【Java基础】HashMap原理及常见面试题目
  18. Mesa Overview
  19. css滚动条-webkit-scrollbar
  20. mysql模糊查询xml_在userMapper.xml文件中模糊查询的常用的3种方法

热门文章

  1. k8s在华为openeuler搭建
  2. 【TS】1552- 浅谈TS运行时类型检查
  3. 微信小程序md5加密支持中文和特殊字符
  4. 记录一下StamPS+SBAS的过程
  5. 传说中的“睡眠算法”的输出分析
  6. 中国上市互联网公司市值排名
  7. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证...
  8. Android向SDCard中上传文件时报错:Failed to push items
  9. SMT32F407+FreeRTOS+LWIP+LAN8720使用Cube MX情况下无法实现网线热插拔
  10. 数据库系统概论 第七章设计数据库