09月05, 2018

C语言 BCD编码与HEX编码相互转换

在做单片机程序的时候,不可避免的要涉及BCD码HEX码 的相互转换和计算。下面简单介绍一下两者的转换。

1. BCD码转HEX


/********** BCD to HEX **********/
//数值范围:0~9999
unsigned long BCD2HEX(unsigned long bcd)
{
  unsigned long temp;
  temp = (((bcd>>12) & 0x000f) * 1000)
       + (((bcd>>8) & 0x000f) * 100)
       + (((bcd>>4) & 0x000f) * 10)
       + (bcd& 0x000f);
  return temp;
}

2. HEX码转BCD码


/********** BCD to HEX **********/
//数值范围:0~9999
unsigned long HEX2BCD(unsigned long hex)
{
      unsigned long bcd;

    bcd = ((HEXtoBCD((hex/100))) << 8);
    bcd += HEXtoBCD(hex%100);
    return bcd;
}

3. 调用示例

我们的例子主要功能位:将BCD编码的数据2099 加2之后再转换为BCD编码

int main()
{        
        unsigned char b[2]={0};

        b[0] = 0x20;
    b[1] = 0x99;

        unsigned int c = 0;

    c = b[0] << 8;
    c += b[1];
    //转换为HEX码
    c = BCD2HEX(c);

    printf("\n hex=%d", c);

    c+=2;

        printf("\n c+2=%d", c);

        //在转换为BCD编码
    c = HEX2BCD(c);    
    printf("\n% c=02x", c);

}

运行结果为:

alt

本文链接:http://blog.guansixu.cn/post/c-bdx-to-hex.html

-- EOF --

Comments