【发布时间】:2021-07-11 13:36:46
【问题描述】:
我目前正在用 C#/.NET 编写一些涉及在网络数据包中发送无符号 16 位整数的内容。字节的顺序需要大端。
在位级别,我对“大端”的理解是,最重要的位在最后,而小端则相反。
在字节级别,我的理解是一样的——如果我将一个 16 位整数转换为组成它的两个 8 位整数,并且架构是小端序,那么我希望最重要的 byte 放在开头。
但是,BitConverter 似乎将具有最小值的字节放在数组的末尾,而不是具有最低有效值的字节,例如
ushort number = 4;
var bytes = BitConverter.GetBytes(number);
Debug.Assert(bytes[BitConverter.IsLittleEndian ? 0 : 1] == 0);
为了清楚起见,如果我的理解是正确的,那么在小端机器上我希望上面返回0x00, 0x04,在大端机器上返回0x04, 0x00。然而,在我运行 .NET 5 的小端 Windows x86 工作站上,它返回 0x04, 0x00
甚至有记录表明他们已经考虑了字节序。来自:https://docs.microsoft.com/en-us/dotnet/api/system.bitconverter.getbytes?view=net-5.0
GetBytes 方法返回的数组中的字节顺序取决于计算机体系结构是小端还是大端。
我是傻还是这看起来是错误的行为?
【问题讨论】:
标签: c# .net bitconverter