最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

BCD码、十六进制与十进制互转

来源:动视网 责编:小OO 时间:2025-09-23 21:10:46
文档

BCD码、十六进制与十进制互转

BCD码、十六进制与十进制互转∙在做嵌入式软件的设计中,经常会遇到十六进制、BCD码与十进制之间的转换,最近做M1卡的应用中,涉及了大量的十六进制、BCD码与十进制之间的转换。笔者通过对BCD码、十六进制权的理解,轻松的实现了他们之间的互换。#include#include/////////////////////////////////////////////////////////功能:二进制取反////输入:constunsignedchar*src二进制数据//intlength待转换
推荐度:
导读BCD码、十六进制与十进制互转∙在做嵌入式软件的设计中,经常会遇到十六进制、BCD码与十进制之间的转换,最近做M1卡的应用中,涉及了大量的十六进制、BCD码与十进制之间的转换。笔者通过对BCD码、十六进制权的理解,轻松的实现了他们之间的互换。#include#include/////////////////////////////////////////////////////////功能:二进制取反////输入:constunsignedchar*src二进制数据//intlength待转换
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])<<(8*(length-1-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; irslt *= 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(); 

如果有其他的方法可以一起讨论

文档

BCD码、十六进制与十进制互转

BCD码、十六进制与十进制互转∙在做嵌入式软件的设计中,经常会遇到十六进制、BCD码与十进制之间的转换,最近做M1卡的应用中,涉及了大量的十六进制、BCD码与十进制之间的转换。笔者通过对BCD码、十六进制权的理解,轻松的实现了他们之间的互换。#include#include/////////////////////////////////////////////////////////功能:二进制取反////输入:constunsignedchar*src二进制数据//intlength待转换
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top