[〜#〜] bcd [〜#〜] を16進数に変換する方法を誰かに説明してもらえますか?たとえば、98(BCD)を16進数に変換するにはどうすればよいですか。ありがとう。
私はあなたの質問を完全には理解していませんが、私はそれを推測しています。誰かがあなたにBCDでエンコードされた番号98を与えます、それは次のようになります:
1001 10
そして、あなたは得ることになっています:
62H
私が提案すること:
1)BCDでエンコードされた値を10進値に変換します(D)
2)Dを16進値に変換します。
選択したプログラミング言語に応じて、このタスクは簡単または困難になります。
編集:Javaの場合:
byte bcd = (byte)0x98; // BCD value: 1001 1000
int decimal = (bcd & 0xF) + (((int)bcd & 0xF0) >> 4)*10;
System.out.println(
Integer.toHexString(decimal)
);
BCDは16進数のサブセットであるため、変換は必要ありません。特定のBCD値は、対応する16進数値と同じです。たとえば、BCDの「98」は10011000であり、これは16進数の98と同じです。
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;
}
256エントリのテーブルを作成し、すべてのBCDバイトを同等のバイナリにマッピングします。その後、プログラミング言語の16進印刷を使用できます。
16進数、10進数、および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を生成するための任意の組み合わせを見つけることができるはずです。 16のすべてではなく、10の組み合わせしか使用しないため、一部の情報が失われます。