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

Kel*_*ton 2 c# endianness

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

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

基本上,这段代码中的想法是将16位int设置为特定位置的字节缓冲区,但问题是我正在尝试使用它来模拟它

using(var ms = new MemoryStream())
using(var w = new BinaryWriter(ms))
{
    w.Write((ushort)1);
}
Run Code Online (Sandbox Code Playgroud)

我期待阅读,1但我得到了256.这是一个字节序问题吗?

Han*_*ant 5

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