十六进制到压缩BCD转换?

时间:2018-11-01 11:05:30

标签: c binary bcd

我应该如何将包含六个值的uint8数组转换为打包的bcd值? 一个简单的4位换档就能完成这项工作吗? 可能的话,我希望代码中的一些示例可以更好地理解我的问题

1 个答案:

答案 0 :(得分:0)

以下代码是如何进行转换的示例。它将BCD数字放入4位半字节,例如s="4660" ==> bcd[]= {0x46, 0x60}

void toBCD(int x)
{
    int nchars, k;
    char s[20], *cp=s;
    unsigned char b, bcd[20], *p=bcd;

    nchars= sprintf(s,"%d",x);
    k=0;
    while (*cp) {
        b = (unsigned char)(*cp++ - '0');
        if (k==0) {
            *p= b;
            k= 1;
        }
        else {
            *p= (*p<<4) | b;    //shift left and put in right nibble
            p++;
            k= 0;
        }
    }
    if (k==1)
        *p= (*p<<4);
}

(代码不会返回任何有意义的内容;它只是转换的一个示例)