1

C#で正の浮動小数点数(ieee 754、単精度32ビット)をBCDに変換するにはどうすればよいですか?

アップデート

私が間違っていなければ、私が必要としているのはパックされた BCD と呼ばれるものです。私はすでに int から BCD への変換を行っています。私のやり方では、数値 1234 は次のバイト配列になります。

{0x00, 0x00, 0x12, 0x34}

私が使用する方法(おそらく最善の方法ではありません)は次のとおりです。

public byte[] ToBCD(long num) {
    long bcd = 0;
    int i = 0;
    while (num > 9) {
        bcd |= ((num % 10) << i);
        num /= 10;
        i += 4;
    }
    byte[] bytes = BitConverter.GetBytes(bcd | (num << i));
    Array.Reverse(bytes);
    return bytes;
}
4

2 に答える 2

3

BCDは、浮動小数点数を格納するようには設計されていません。ただし、実行できるのは、独自のカスタムBCDのようなスキーマを使用してエンコードおよびデコードすることです。たとえば、私はあなたの数を取り、小数点を削除します。次に、通常のように、各桁をBCDとしてエンコードします。次に、小数点をどこに置くかを決定するために4ビットを追加します。たとえば、番号をエンコードするには15.101

15.101 -> 15101-小数点を削除します

15101 -> 0001 0101 0001 0000 0001--BCDに変換

ここで、小数点以下の桁数を決定するために、最後に4ビットを追加するだけです。

0001 0101 0001 0000 0001 -> 0001 0101 0001 0000 0001 0011

0011です3。これは、小数点が3桁左に移動するためです。

関数に関する限り、右端の4ビットを選択して、後で使用できるように保存してください。次に、通常どおり関数を実行します。次に、保存した右側の4ビットを10進数に変換します。次に、それ(10*number)で割る

于 2012-05-23T21:22:09.623 に答える
0

この質問の処理方法はわかりませんが、私が見つけたものは次のとおりです。

プロトコルのドキュメントがおかしいので、私はいくつかの古いコードを検索し、他のデータがBCDとしてエンコードされていても、浮動小数点数がエンコードされていないという証拠を見つけました。したがって、BitConverter.GetBytesは私が必要とすることを実行します。

于 2012-05-24T12:52:05.987 に答える