比特转移c#这里发生了什么?

时间:2012-07-13 20:56:20

标签: c# endianness

所以我很好奇,这到底发生了什么?

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。这是一个字节序问题吗?

2 个答案:

答案 0 :(得分:5)

代码以big-endian顺序写入一个16位整数。首先写入高位字节。与BinaryWriter不同的是,它以小端顺序写入。

答案 1 :(得分:3)

解码数据时,如果期望1,你得到256吗? BinaryWriter.Write使用little-endian编码,你的SetUInt16方法使用big-endian。

相关问题