<b>C语言的十六进制(HEX)转BCD码程序</b>void HEXtoBCDData(void) { unsigned char ucHEXdata[10] = {0},ucBCDdata[10] = {0}; unsigned int uiHEXdata = 0; unsigned long int ulHEXdata = 0; ucHEXdata[0] = 0x63; //十进制为99 ucBCDdata[0] = (ucHEXdata[0]/10)*0x10 + (ucHEXdata[0]%10); //ucBCDdata[0]=99 ucHEXdata[0] = 0xf5; //十进制为245 ucHEXdata[1] = ucHEXdata[0]/100; ucHEXdata[2] = ucHEXdata[0]%100; ucBCDdata[0] = ucHEXdata[1]; ucBCDdata[1] = (ucHEXdata[2]/10)*0x10 + (ucHEXdata[2]%10); //ucBCDdata[1]=2,ucBCDdata[0]=45 uiHEXdata = 0xfff5; //十进制为65525 ucHEXdata[1] = uiHEXdata%100; ucBCDdata[0] = (ucHEXdata[1]/10)*0x10 + (ucHEXdata[1]%10); uiHEXdata = uiHEXdata/100; ucHEXdata[2] = uiHEXdata%100; ucBCDdata[1] = (ucHEXdata[2]/10)*0x10 + (ucHEXdata[2]%10); uiHEXdata = uiHEXdata/100; ucHEXdata[3] = uiHEXdata%100; ucBCDdata[2] = (ucHEXdata[3]/10)*0x10 + (ucHEXdata[3]%10); //ucBCDdata[2]=6,ucBCDdata[1]=55,ucBCDdata[0]=25 ulHEXdata = 0xfffffff5; //十进制为4294967285 ucHEXdata[1] = ulHEXdata%100; ucBCDdata[0] = (ucHEXdata[1]/10)*0x10 + (ucHEXdata[1]%10); ulHEXdata = ulHEXdata/100; ucHEXdata[2] = ulHEXdata%100; ucBCDdata[1] = (ucHEXdata[2]/10)*0x10 + (ucHEXdata[2]%10); ulHEXdata = ulHEXdata/100; ucHEXdata[3] = ulHEXdata%100; ucBCDdata[2] = (ucHEXdata[3]/10)*0x10 + (ucHEXdata[3]%10); ulHEXdata = ulHEXdata/100; ucHEXdata[4] = ulHEXdata%100; ucBCDdata[3] = (ucHEXdata[4]/10)*0x10 + (ucHEXdata[4]%10); ulHEXdata = ulHEXdata/100; ucHEXdata[5] = ulHEXdata%100; ucBCDdata[4] = (ucHEXdata[5]/10)*0x10 + (ucHEXdata[5]%10); //ucBCDdata[4]=42,ucBCDdata[3]=94, //ucBCDdata[2]=96,ucBCDdata[1]=72,ucBCDdata[0]=85 ulHEXdata = 0xfffffff4; //十进制为42 94 96 72 84 for(int i=0;i<5;i++) { ucHEXdata[i]=ulHEXdata%100; ulHEXdata=ulHEXdata/100; ucBCDdata[i]=(ucHEXdata[i]/10)*0x10+ucHEXdata[i]%10; } //ucBCDdata[4]=42,ucBCDdata[3]=94, //ucBCDdata[2]=96,ucBCDdata[1]=72,ucBCDdata[0]=84 }
复制代码C语言的BCD 码转十进制(十六进制HEX)程序
说明:本程序分别列举了单字节BCD码转换为char型数据;2字节BCD码转换为int型数据;4字节bcd码转换为long int型数据的的方法。unsigned char ucBCDdata[10] = {0x11,0x22,0x33,0x44,0x55,0x55,0x66,0x77}; unsigned char ucHEXdata11 = 0,ucHEXdata[10] = {0}; unsigned int uiHEXdata = 0,uiHEXdata11 = 0; unsigned long int ulHEXdata = 0; //1、现实中十六进制数和十进制数不可以直接相加,如果是在电脑上的话是可以的,因为不管 //何种进制数在电脑上都是以二进制的形式表示的,所以在电脑编写程序时是可以相加的。 //C语言程序中,十进制和十六进制实际是互通的, //单字节BCD码转十进制 //高半字节=BCD码字节除16的商,低半字节=BCD码字节除16的余数 ucHEXdata[0] = (ucBCDdata[0]>>4)*10 +(0xf & ucBCDdata[0]); ucHEXdata11 = ucHEXdata[0]; //2字节BCD码转换为整数 //先将2个字节的BCD码分别转换为十进制,然后高字节*100+低字节=整数 ucHEXdata[0] = (ucBCDdata[0]>>4)*10 +(0xf & ucBCDdata[0]); ucHEXdata[1] = (ucBCDdata[1]>>4)*10 +(0xf & ucBCDdata[1]); uiHEXdata = ucHEXdata[1]*100 + ucHEXdata[0]; //4字节BCD码转换为整数 //先将4个字节的BCD码分别转换为十进制,按照十进制数的整合方式整合为长整形 ucHEXdata[0] = (ucBCDdata[0]>>4)*10 +(0xf & ucBCDdata[0]); ucHEXdata[1] = (ucBCDdata[1]>>4)*10 +(0xf & ucBCDdata[1]); ucHEXdata[2] = (ucBCDdata[2]>>4)*10 +(0xf & ucBCDdata[2]); ucHEXdata[3] = (ucBCDdata[3]>>4)*10 +(0xf & ucBCDdata[3]); ulHEXdata = ((unsigned long int)ucHEXdata[3]*1000000) +((unsigned long int)ucHEXdata[2]*10000) +((unsigned long int)ucHEXdata[1]*100) + ucHEXdata[0];
复制代码