所以我很好奇,这到底发生了什么?
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
。这是一个字节序问题吗?
答案 0 :(得分:5)
代码以big-endian顺序写入一个16位整数。首先写入高位字节。与BinaryWriter不同的是,它以小端顺序写入。
答案 1 :(得分:3)
解码数据时,如果期望1,你得到256吗? BinaryWriter.Write使用little-endian编码,你的SetUInt16方法使用big-endian。