c语言实现十进制转十六进制,十进制与bcd码之间的转换
在设计嵌入式软件时,经常会遇到十六进制、BCD代码和十进制之间的转换。 最近创建M1卡的APP应用程序包含许多十六进制、BCD码和十进制之间的转换。 笔者通过了解BCD码、十六进制权利,轻松实现了他们之间的交换。
#包含
#包含
/
//
//功能:二进制相反
//
//输入:一致不一致的char * src二进制数据
//int length要转换的二进制数据的长度
//
//输出: unsigned char *dst反转的二进制数据
//
//返回:0 success
//
//
(不一致的char * dst,一致的char * src,不一致的char * src ) ) ) ) ) ) 652
{
int i;
for(I=0; I
{
dst[i]=src[i]^0xFF;
}
返回0;
}
//
//
//功能:从十六进制到十进制
//
//输入:要进行一致化char * hex转换的十六进制数据
//int length进制数据长度
//
//输出:
//
//返回: int rslt转换后的十进制数据
//
//思路:十六进制各位表示的十进制范围为0至255,256进制
//向左移动8位(8)等价乘以256
//
/
(unsignedlonghextodec (constunsignedchar * hex,int length () ) ) ) ) ) ) )。
{
int i;
unsigned long rslt=0;
for(I=0; I
{
(rlt=(无符号长) (hex[i] ) ) ) ) ) ) ) ) )。
}
返回rslt;
}
/
//
//功能:从十进制到十六进制
//
//输入: int dec转换的十进制数据
//int length转换后的十六进制数据长度
//
//输出: unsigned char *hex转换后的十六进制数据
//
//返回:0 success
//
//想法:原理从十六进制数转移到十进制数
//
intdectohex(intdec,unsigned char *hex,int length ) )。
{
int i;
for(I=length-1; i=0; I----)
{
hex[I]=(dec%6)0xFF;
dec /=256;
}
返回0;
}
/
//
//功能:要求权利
//
//输入: int base进制基数
//int times权利级数
//
//输出:
//
//后退:无符号长整型当前数据位的权限
//
//
统一长电源(int base,int times ) )。
{
int i;
无符号长rslt=1;
for(I=0; I
rslt *=base;
返回rslt;
}
/
//
//功能: BCD旋转10进制
//
//输入: const unsigned char *要转换的BCD代码
//int length BCD代码数据长度
//
//输出:
//
//后退:无符号长整型当前数据位的权限
//
//思路:压缩BCD码的一个字符表示的十进制数据范围为0~99,100进制
//首先求出各文字表示的十进制值,乘以权重
//
(未注册的bcdtodec (constunsignedchar * BCD,int length () ) ) ) ) ) ) 65
{
int i,tmp;
无符号长码=0;
for(I=0; I
{
tmp=(BCD[I]4)0x0F ) 10 ) BCD[I]0x0f );
DEC=tmp*power(100,length-1-i );
}
返回德克;
}
/
//
//功能:十进制转换BCD码
//
//输入: int Dec转换的十进制数据
//int length BCD代码数据长度
//
//输出:无符号char * BCD转换后的BCD代码
//
//返回:0 success
//
//思路:原理转向BCD码和十进制
//
//
intdectobcd(intdec,未指定的char * BCD,int length ) )。
{
int i;
int temp;
for(I=length-1; i=0; I----)
{
temp=Dec0;
BCD [ I ]=(时间/10 )4) ) ) temp )0x0F );
Dec /=100;
}
返回0;
}
int main () )
{
注册器int I;
unsigned char tmp_bff[12]=' ';
//从十六进制到十进制
unsignedcharhex [4]={0x 34,0x Fe,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; i5; I )
{
printf(tmp_bff(%d )=0xx(n ),I,tmp_bff ) I );
}
//将BCD代码设置为十进制
unsigned long dec_bcd=0;
unsignedcharbcd [4]={0x 98,0x 23,0x 45,0x 78 };
DEC_BCD=bcdtodec(BCD,4 );
printf(dec_bcd=%d\n ),dec_BCD );
//十进制转换BCD码
dectobcd(dec_BCD,tmp_bff,4 );
for(I=0; i5; I )
{
printf(tmp_bff(%d )=0xx(n ),I,tmp_bff ) I );
}
getchar (;
}