二进制编码十进制(BCD)到十六进制转换

时间:2010-12-20 22:34:58

标签: hex bcd

有人可以向我解释如何将BCD转换为十六进制吗?例如,我如何将98(BCD)转换为十六进制。 感谢。

5 个答案:

答案 0 :(得分:9)

BCD是十六进制的子集,因此不需要转换 - 任何给定的BCD值都与相应的十六进制值相同。例如,BCD中的'98'是10011000,与十六进制中的98相同

答案 1 :(得分:9)

我不太明白你的问题,但我猜测,例如有人给你一个用BCD编码的数字98,它将是:

1001 1000

你应该得到:

<强> 62H

我会建议:

1)将BCD编码的值转换为十进制值(D)

2)将D转换为十六进制值。

根据您选择的编程语言,此任务将更容易或更难。

编辑:在Java中可能是:

    byte bcd = (byte)0x98; // BCD value: 1001 1000

    int decimal = (bcd & 0xF) + (((int)bcd & 0xF0) >> 4)*10;

    System.out.println(
            Integer.toHexString(decimal)
    );

答案 2 :(得分:3)

对于任何BCD编码值(适合int)。

迭代:

unsigned int bcd2dec(unsigned int bcd)
{
    unsigned int dec=0;
    unsigned int mult;
    for (mult=1; bcd; bcd=bcd>>4,mult*=10)
    {
        dec += (bcd & 0x0f) * mult;
    }
    return dec;
}

递归:

unsigned int bcd2dec_r(unsigned int bcd)
{
    return bcd ? (bcd2dec_r(bcd>>4)*10) + (bcd & 0x0f) : 0; 
}

答案 3 :(得分:2)

我创建一个包含256个条目的表,将所有BCD字节映射到它们的二进制等价物中;然后,您可以使用编程语言的十六进制打印。

答案 4 :(得分:2)

在Hex,Decimal和Binary的不同组合之间进行。如果您知道二进制如何工作,那么您应该可以轻松地使用BCD:

Hex  Dec  BCD
0    0    0000
1    1    0001
2    2    0010
3    3    0011
4    4    0100
5    5    0101
6    6    0110
7    7    0111
8    8    1000
9    9    1001
A   10    0001 0000 <-- notice that each digit looks like hex except it can only go to 9.
B   11    0001 0001
C   12    0001 0010
D   13    0001 0011
E   14    0001 0100
F   15    0001 0101

一旦你完成了这一部分,你应该可以使用除以10或%10来找到任何组合来生成你的BCD。由于它只使用10种组合而不是全部16种,因此会丢失一些信息。