9

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

4

5 回答 5

11

我不太明白你的问题,但我猜有人给你一个用 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)
    );
于 2010-12-20T22:50:54.153 回答
9

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

于 2010-12-20T22:40:25.977 回答
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; 
}
于 2012-02-22T10:58:44.660 回答
2

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

于 2010-12-20T22:38:01.413 回答
2

在十六进制、十进制和二进制的不同组合之间切换。如果您知道二进制是如何工作的,那么您应该可以轻松地使用 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 种组合,因此您会丢失一些信息。

于 2010-12-20T22:49:11.627 回答