有人可以向我解释如何将BCD转换为十六进制吗?例如,我如何将98(BCD)转换为十六进制。 感谢。
答案 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种,因此会丢失一些信息。