2

ソケット経由でデータを読み取っています。整数データ型は問題ありません。System.BitConverter メソッドは変換を正しく処理しています。(つまり、エンディアンの問題は心配する必要がないと思いますか?)

ただし、 BitConverter.ToDouble はデータの浮動小数点部分に対しては機能しません...ソース仕様は私にとっては少し低レベルですが、より重要な方向に正のバイトオフセットを持つバイナリ固定小数点表現について話しています。重要でない方向の負のバイト オフセット。

私が行った調査のほとんどは、C++ またはサインとコサインを処理する完全な固定小数点ライブラリを対象としており、この問題にはやり過ぎのように思えます。誰かが、たとえば-3バイトのオフセットを持つ8バイトのバイト配列からfloatを生成するC#関数を手伝ってくれませんか?

要求されたフォーマットの詳細:

固定小数点データの符号付き数値は、2 進の 2 の補数表記を使用して表されます。固定小数点データの場合、各データ パラメータの値は、参照バイトに関連して定義されます。参照バイトは 8 ビット フィールドを定義し、測定単位は LSB 位置にあります。参照バイトの LSB の値は 1 です。バイト オフセットは、参照バイトに対するデータ要素の最下位バイトの位置を示す符号付き整数によって定義されます。データ要素の MSB は符号ビットを表します。パラメータの絶対値の MSB と最上位バイトの MSB の間のビット位置は、符号ビットと同じ値でなければなりません。

浮動小数点データは、IEEE ANSI/IEEE Std 754-2008 に準拠したバイナリ浮動小数点数として表されます。(この文は、レッドニシンである可能性がある別のセクションからのものです)。

4

2 に答える 2

1

地元の専門家にソース資料について質問したところ、CodeInChaosは正しい方向に進んでいたことがわかりました...値が8バイトでオフセットが-3バイトの場合、BitConverter.ToInt64 /256^を使用できます。 3、-1バイトのオフセットで4バイトの場合、BitConverter.ToInt32/256が正解を生成します。これは、XXXが署名されているBitConverter.ToXXXが、2の補数の計算を処理するのに十分スマートであることを意味していると思います。

手伝ってくれた人たちのおかげで、それほど複雑になることはないと思いましたが、参照ドキュメントの文言から256オフセットを取得することは非常に混乱しました:-)

于 2011-01-07T12:14:40.637 に答える
0

System.BitConverter の動作は非常に遅いため、パフォーマンスが重要な場合は、自分で (論理シフトを介して) バイトを int に変換することをお勧めします。また、フロートがプロトコルで送信される正確な形式を指定してください。

于 2011-01-05T12:50:16.263 に答える