質問

誰かが私に変換する方法を説明してもらえますか 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個の組み合わせしか使用しないため、情報が失われます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top