質問
誰かが私に変換する方法を説明してもらえますか BCD ヘキサデシマルに?たとえば、98(BCD)を16進変換するにはどうすればよいですか。ありがとう。
解決
私はあなたの質問をよく理解していませんが、例えば誰かがあなたにBCDでエンコードされた98番を与えると推測しています。それは次のとおりです。
1001 1000
そして、あなたは得ることになっています:
62H
私が提案するもの:
1)BCDエンコード値を小数値(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進、小数、およびバイナリの異なる組み合わせの間に移動します。バイナリがどのように機能するかを知っている場合は、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
この部分を倒したら、divideを10または%10で使用して任意の組み合わせを見つけてBCDを生成できるはずです。 16個すべてではなく10個の組み合わせしか使用しないため、情報が失われます。
所属していません StackOverflow