2011-01-05 36 views
2

ソケットを介してデータを読み取っています。整数データ型は問題なく、System.BitConverterメソッドは変換を正しく処理しています。しかし、BitConverter.ToDoubleはデータの浮動小数点部分では機能していません...ソース仕様は私にとっては少し低いレベルですが、より重要な方向に正のバイトオフセットを持ち、下位の方向に負のバイトオフセットを持つバイナリ固定小数点表現について述べています。バイナリ固定小数点のbyte []を浮動小数点値に変換する

私が行った研究のほとんどは、C + +や正弦固定点ライブラリを対象としていました。このライブラリは正弦波と余弦を扱っています。誰かが、例えば、-3バイトのオフセットを持つバイト配列の8バイトから浮動小数点を生成するC#関数を手伝ってくれますか?要求されたようなフォーマットの

さらなる詳細:

固定小数点データの符号付き数値は、固定小数点データnotation.Forバイナリ、2の補数で表現されるものと、各データパラメータの値が、関連して定義されなければなりません参照バイトに変換します。基準バイトは、8ビットのフィールドを定義し、LSB位置に小節の単位を入れます。参照バイトのLSBの値は1です。 バイトオフセットは、参照バイトに対するデータ要素の最下位バイトの位置を示す符号付き整数によって定義されます。 データ要素のMSBは符号ビットを表します。 の絶対値のMSBと最上位バイトのMSBとの間のビット位置は、符号ビットと同じ値でなければならない。

浮動小数点データは、IEEE ANSI/IEEE Std 754-2008に準拠したバイナリ浮動小数点数として表現されます。 (この文は赤いニシンかもしれない別のセクションからのものです)。

+1

:-)参考文書の文言からのオフセット256は非常に混乱したということになっ。 2つの異なるフォーマット間で変換するためには、それらのフォーマットの正確な定義が必要です。固定小数点フォーマットの定義を提供していないだけでなく(浮動小数点はIEE754で定義されています)、実際にこのような定義がないことを示唆しています。この情報を入手する必要があります。 –

+0

単純な固定小数点数の場合は、intとして解析して、それに一定の定数を掛けることができます。例えば、2^-16の場合、固定小数点は16小数ビットです。 – CodesInChaos

+0

@CodeInChaosそれは本当ですが、OPは彼の更新後であってもフォーマットを知らない。 –

答えて

1

[OK]を、ソース資料のローカルエキスパートから質問をした後、正しいトラックにCodeInChaosがありました。値が8バイトで-3バイトオフセットの場合、BitConverterを使用できます。 ToInt64/256^3の場合、-1バイトのオフセットを持つ4バイトであれば、BitConverter.ToInt32/256は正しい答えを生成します。私は、BitConverter.ToXXXはXXXが署名されているという意味で、2の補数の計算を処理するのに十分スマートです!手助けしようとした人たちに

おかげで、私はそれがあまりにも複雑ではないと考えていたが、この質問は、現時点でお答えすることは不可能である

+0

あなた自身の質問に答えることができればそれを "答え"としてマークします。そうでない場合は、 "答えられていない"クエリーで表示され続けます。 –

0

System.BitConverterの動作は非常に遅いので、パフォーマンスが重要な場合は、自分自身で(論理シフトを使用して)バイトをintに変換することをお勧めします。 また、フロートがあなたのプロトコルでどのような形式で送られてくるかを明記してください。

+0

いつBitConverterが遅くなるのですか?これに関する統計はありますか? –

+0

私は数年前、対称暗号化アルゴリズムの実装でそれを発見した。私は今、数字を表示することはできませんが、違いが非常に重要であるとしか言えません。 –

関連する問題