十进制十六进制BCD码相互转换C程序培训资料.docx
《十进制十六进制BCD码相互转换C程序培训资料.docx》由会员分享,可在线阅读,更多相关《十进制十六进制BCD码相互转换C程序培训资料.docx(6页珍藏版)》请在冰豆网上搜索。
十进制十六进制BCD码相互转换C程序培训资料
十进制,十六进制,BCD码相互转换C程序
本人用过的十六进制、BCD码之间的转换C程序,还有十进制的,可以参考使用,
#include
#include
/////////////////////////////////////////////////////////
//
//功能:
十进制转十六进制
//
//输入:
intdec 待转换的十进制数据
// intlength 转换后的十六进制数据长度
//
//输出:
unsignedchar*hex 转换后的十六进制数据
//
//返回:
0 success
//
//思路:
原理同十六进制转十进制
//////////////////////////////////////////////////////////
intDectoHex(intdec,unsignedchar*hex,intlength)
{
inti;
for(i=length-1;i>=0;i--)
{
hex[i]=(dec%256)&0xFF;
dec/=256;
}
return0;
}
/////////////////////////////////////////////////////
//
//功能:
二进制取反
//
//输入:
constunsignedchar*src 二进制数据
// intlength 待转换的二进制数据长度
//
//输出:
unsignedchar*dst 取反后的二进制数据
//
//返回:
0 success
//
//////////////////////////////////////////////////////
intconvert(unsignedchar*dst,constunsignedchar*src,intlength)
{
inti;
for(i=0;i {
dst[i]=src[i]^0xFF;
}
return0;
}
//////////////////////////////////////////////////////////
//
//功能:
十六进制转为十进制
//
//输入:
constunsignedchar*hex 待转换的十六进制数据
// intlength 十六进制数据长度
//
//输出:
//
//返回:
int rslt 转换后的十进制数据
//
//思路:
十六进制每个字符位所表示的十进制数的范围是0~255,进制为256
// 左移8位(<<8)等价乘以256
//
/////////////////////////////////////////////////////////
unsignedlongHextoDec(constunsignedchar*hex,intlength)
{
inti;
unsignedlongrslt=0;
for(i=0;i {
rslt+=(unsignedlong)(hex[i])<<(8*(length-1-i));
}
returnrslt;
}
/////////////////////////////////////////////////////////
//
//功能:
求权
//
//输入:
intbase 进制基数
// inttimes 权级数
//
//输出:
//
//返回:
unsignedlong 当前数据位的权
//
//////////////////////////////////////////////////////////
unsignedlongpower(intbase,inttimes)
{
inti;
unsignedlongrslt=1;
for(i=0;i rslt*=base;
returnrslt;
}
/////////////////////////////////////////////////////////
//
//功能:
BCD转10进制
//
//输入:
constunsignedchar*bcd 待转换的BCD码
// intlength BCD码数据长度
//
//输出:
//
//返回:
unsignedlong 当前数据位的权
//
//思路:
压缩BCD码一个字符所表示的十进制数据范围为0~99,进制为100
// 先求每个字符所表示的十进制值,然后乘以权
//////////////////////////////////////////////////////////
unsignedlong BCDtoDec(constunsignedchar*bcd,intlength)
{
inti,tmp;
unsignedlongdec=0;
for(i=0;i {
tmp=((bcd[i]>>4)&0x0F)*10+(bcd[i]&0x0F);
dec+=tmp*power(100,length-1-i);
}
returndec;
}
/////////////////////////////////////////////////////////
//
//功能:
十进制转BCD码
//
//输入:
intDec 待转换的十进制数据
// intlength BCD码数据长度
//
//输出:
unsignedchar*Bcd 转换后的BCD码
//
//返回:
0 success
//
//思路:
原理同BCD码转十进制
//
//////////////////////////////////////////////////////////
intDectoBCD(intDec,unsignedchar*Bcd,intlength)
{
inti;
inttemp;
for(i=length-1;i>=0;i--)
{
temp=Dec%100;
Bcd[i]=((temp/10)<<4)+((temp%10)&0x0F);
Dec/=100;
}
return0;
}
intmain()
{
registerinti;
unsignedchartmp_bff[12]="";
//十六进制转十进制
unsignedcharHEX[4]={0x34,0xFE,0x3E,0xFF};
unsignedlongdec_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码转十进制
unsignedlongdec_bcd=0;
unsignedcharBCD[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();
}