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 所做的不同,它以 little-endian 顺序写入。

于 2012-07-13T20:59:50.190 回答
3

当你解码数据时,你期望 1 时得到 256 吗?BinaryWriter.Write使用小端编码,您的 SetUInt16 方法使用大端编码。

于 2012-07-13T20:59:57.260 回答