1
Struct {
 byte F1[2]
 SHORT F2
 byte F3[512]
} BPD


CBD
{
 SHORT CLENGTH
 byte DATA[]
}

上記は2つのc++構造です。ここで、SHORTは2バイトで署名されています。それをC#に変換する最良の方法は何でしょうか?

(2番目の構造ではDATAの長さが未定義であることに注意してください。)

私は2つのリンクをたどるのを見てきました。

C#の固定長の文字列または構造

バイト配列からのC#のC /C++データ構造の読み取り

データを構造体に読み込んだ後、短い変数をビッグエンディアンに変換する必要があります。(バイトを反転します)。

4

2 に答える 2

0

変換する必要があるのは「short」だけです。ビッグ/リトルエンディアンプラットフォームで同一のバイト配列。

したがって、構造を読んで、次のようにします。

data.F2 =((uint)data.F2 >> 8)| (((uint)data.F2&0xFF)<< 8);

data.CLENGTH =((uint)data.CLENGTH >> 8)| (((uint)data.CLENGTH&0xFF)<< 8);

于 2010-02-26T04:21:18.160 に答える
-2

自分で解決しました。

構造は優れていますが、データクラスを変更しない場合は、使用することをお勧めします。私はc++構造用にc#でクラスを作成し、ビッグエンディアンからリトルエンディアンへの変換用に3つのライブラリ関数を作成しました。

貴重な情報を提供してくれた皆さんに感謝します。

于 2010-03-05T13:56:02.567 に答える