c++ 转bcd码_BCD码、十六进制与十进制互转
在做嵌入式软件的设计中,经常会遇到十六进制、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码、十六进制与十进制互转相关推荐
- C# 进制转换(二进制、十六进制、十进制互转) .
C# 进制转换(二进制.十六进制.十进制互转) 由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示 例如: 二进制: 1010 表示为 字符串:"1010" ...
- C# 进制转换(二进制、十六进制、十进制互转)
C# 进制转换(二进制.十六进制.十进制互转) 二进制转十进制数 string i = "0010"; Console.WriteLine(Convert.ToInt32(i,2) ...
- c++ 转bcd码_BCD码转10进制字符串(C#、C++)
C# /// /// 将bcd字节数组转为10进制字符串 /// /// bcd码字节数组 /// 返回转换后的10进制字符串 public string BCDCodeToDecimalString ...
- python十六进制和十进制互转
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串.(多组同时输入 ) 输入描述: 输入一个十六进制的数值字符串. 输出描述: 输出该数值的十进制字符串. 示例1 输入 0xA 输出 ...
- c语言十六转十进制,C语言 · 十六进制转十进制
问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出. 注:十六进制数中的10~15分别用大写的英文字母A.B.C.D.E.F表示. 样例输入 FFFF 样例输出 6 ...
- linux c十六进制转十进制函数,用Linux/Unix命令把十六进制转换成十进制(转)
那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了. 先列两种简单的方法: 1) echo 自己就能 ...
- 整型和bcd的对应关系_BCD码与整数之间的转换
1.BCD码的概念 BCD码 意为 "二进制编码的十进制数".BCD码是一种编码方式,是以二进制数对十进制数字的编码,每四位二进制码表示一位十进制数,并因为16进制的优势,改用十六 ...
- bcd转ascii码 流程图_BCD码转换成二进制和ASCII码
首先得知道什么是BCD码,可以看下百度,基本定义已经讲清楚了,百度链接:BCD码--百度百科:这里要说的也是最常用的一种BCD码:8421码.本文规定若没有特殊说明时,各个数值只会是十进制数.二进制数 ...
- 数制和码制(数制的转换的方法,BCD码<8421,2421,5421,余三码>,格雷码,原码,反码,补码,定点数和浮点数)
目录 1.数制的转换 1)二,八,十六进制进制转十进制 加权系数求和法 2)十进制转二,八,十六进制 除基取余法(短除法) 减权定位法 3)二,八,十六进制的相互转换 2.BCD码 3.格雷码 4.原 ...
最新文章
- VS编译器如何单步调试
- 002_ZooKeeper安装配置
- twilio_15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
- 【OpenCV 例程200篇】25. 图像的平移
- 太耿直了!自家总监评拯救者Y90的640GB超大存储:用来吹牛的
- C++ 基础 - woaidongmao - C++博客 good 量产
- Output Arcade for Mac - 新型音频合成器
- 桌面虚拟化与带宽,延迟之间的关系
- Intellij IDEA 2019 最新优化配置
- 如何检测android手机是否支持3g网络或者4g网络 源码,iOS中怎么判断当前网络环境是2G/3G/4G/5G/WiFi...
- 高斯-勒让德求积公式及Matlab实现
- 互联网公司的监控运维
- Python Socket网络编程(一)初识Socket和Socket初步使用
- python -flask简介
- c语言编程显示未定义的引用,c – 链接时奇怪的未定义引用
- mysql的四表查询_Mysql经典四表查询
- 【Java基础】HashMap原理及常见面试题目
- Mesa Overview
- css滚动条-webkit-scrollbar
- mysql模糊查询xml_在userMapper.xml文件中模糊查询的常用的3种方法
热门文章
- k8s在华为openeuler搭建
- 【TS】1552- 浅谈TS运行时类型检查
- 微信小程序md5加密支持中文和特殊字符
- 记录一下StamPS+SBAS的过程
- 传说中的“睡眠算法”的输出分析
- 中国上市互联网公司市值排名
- {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证...
- Android向SDCard中上传文件时报错:Failed to push items
- SMT32F407+FreeRTOS+LWIP+LAN8720使用Cube MX情况下无法实现网线热插拔
- 数据库系统概论 第七章设计数据库