<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];
  • 复制代码