2

ここで一体何が起こっているのだろうか?

static void SetUInt16 (byte [] bytes, int offset, ushort val)
{
    bytes [offset] = (byte) ((val & 0x0ff00) >> 8);
    bytes [offset + 1] = (byte) (val & 0x0ff);
}

基本的に、このコードのアイデアは、16 ビット int を特定の場所のバイト バッファーに設定することですが、問題は、それを使用してエミュレートしようとしていることです。

using(var ms = new MemoryStream())
using(var w = new BinaryWriter(ms))
{
    w.Write((ushort)1);
}

私は読むことを期待しています1が、代わりに256. これはエンディアンの問題ですか?

4

2 に答える 2

5

このコードは、16 ビット整数をビッグ エンディアン順に書き込みます。上位バイトが最初に書き込まれます。BinaryWriter とは異なり、リトルエンディアン順に書き込みます。

于 2012-07-13T20:59:50.190 に答える
3

データをデコードすると、1 を期待しているときに 256 が得られますか? BinaryWriter.Writeはリトル エンディアン エンコーディングを使用し、SetUInt16 メソッドはビッグ エンディアンを使用しています。

于 2012-07-13T20:59:57.260 に答える