搜索
您的当前位置:首页正文

bcd码改换成十进制程序

来源:欧得旅游网
bcd码改换成十进制程序

在做嵌入式软件的方案中,常常会遇到十六进制、BCD码与十进制之间的改换,近期做M1卡的运用中,触及了很多的十六进制、BCD码与十进制之间的改换。笔者经过对BCD码、十六进制权的了解,轻松的结束了他们之间的沟通。

#includelt;stdio.h

#includelt;string.h

/////////////////////////////////////////////////////

//

//功用:二进制取反

//

//输入:constunsignedchar*src二进制数据

//intlength待改换的二进制数据长度

//

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

1

//

//回来:0success

//

//////////////////////////////////////////////////////

intconvert(unsignedchar*dst,constunsignedchar*src,intlength)

{

inti;

for(i=0;ilt;length;i++)

{

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

}

return0;

}

2

//////////////////////////////////////////////////////////

//

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

//

//输入:constunsignedchar*hex待改换的十六进制数据

//intlength十六进制数据长度

//

//输出:

//

//回来:intrslt改换后的十进制数据

//

//思路:十六进制每个字符位所标明的十进制数的方案是0~255,进制为256

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

3

//

/////////////////////////////////////////////////////////

unsignedlongHextoDec(constunsignedchar*hex,intlength)

{

inti;

unsignedlongrslt=0;

for(i=0;ilt;length;i++)

{

rslt+=(unsignedlong)(hex[i])lt;lt;(8*(length-1-i));

}

returnrslt;

}

/////////////////////////////////////////////////////////

4

//

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

//

//输入:intdec待改换的十进制数据

//intlength改换后的十六进制数据长度

//

//输出:unsignedchar*hex改换后的十六进制数据

//

//回来:0success

//

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

//////////////////////////////////////////////////////////

intDectoHex(intdec,unsignedchar*hex,intlength)

5

{

inti;

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

{

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

dec/=256;

}

return0;

}

/////////////////////////////////////////////////////////

//

//功用:求权

//

6

//输入:intbase进制基数

//int;x权级数

//

//输出:

//

//回来:unsignedlong其时数据位的权

//

//////////////////////////////////////////////////////////

unsignedlongpower(intbase,int;x)

{

inti;

unsignedlongrslt=1;

for(i=0;ilt;;x;i++)

7

rslt*=base;

returnrslt;

}

/////////////////////////////////////////////////////////

//

//功用:BCD转10进制

//

//输入:constunsignedchar*bcd待改换的BCD码

//intlengthBCD码数据长度

//

//输出:

//

//回来:unsignedlong其时数据位的权

8

//

//思路:紧缩BCD码一个字符所标明的十进制数据方案为0~99,进制为100

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

//////////////////////////////////////////////////////////

unsignedlongBCDtoDec(constunsignedchar*bcd,intlength)

{

inti,tmp;

unsignedlongdec=0;

for(i=0;ilt;length;i++)

{

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

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

}

9

returndec;

}

/////////////////////////////////////////////////////////

//

//功用:十进制转BCD码

//

//输入:intDec待改换的十进制数据

//intlengthBCD码数据长度

//

//输出:unsignedchar*Bcd改换后的BCD码

//

//回来:0success

//

10

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

//

//////////////////////////////////////////////////////////

intDectoBCD(intDec,unsignedchar*Bcd,intlength)

{

inti;

inttemp;

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

{

temp=Dec%100;

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

Dec/=100;

}

11

return0;

}

//-------------函数信息------------------------------------------

//函数名:BCDtoDec

//函数描绘:BCD码改换成十进制码

//进口参数:temp:转化的BCD码

//返回:转化后的十进制码

//说明:

//

//---------------------------------------------------------------

uint8BCDtoDec(uint8temp)

{

return((temp/16)*10+temp%16);

12

}

//-------------函数信息------------------------------------------

//函数名:DectoBCD

//函数描绘:十/十六进制码改换成BCD码

//进口参数:temp:转化的十进制码

//返回:转化后的BCD码

//作者:

//日期:2006.11.24

//说明:

//

//---------------------------------------------------------------

uint8DectoBCD(uint8temp)

{

13

return((temp/10)*16+temp%10);

}

14

因篇幅问题不能全部显示,请点此查看更多更全内容

Top