3 回答
TA贡献1876条经验 获得超5个赞
C#本身未定义字节序。但是,无论何时转换为字节,您都在做出选择。该BitConverter类有一个IsLittleEndian场告诉你这将如何表现,但它不给的选择。BinaryReader / BinaryWriter也是如此。
我的MiscUtil库有一个EndianBitConverter类,它允许您定义字节序;BinaryReader / Writer有类似的等效项。恐怕没有在线使用指南,但它们并不重要:)
(EndianBitConverter还具有普通BitConverter中不存在的功能,该功能可以在字节数组中就地进行转换。)
TA贡献1784条经验 获得超8个赞
关于小尾数,简短的答案(我需要做任何事情)是“可能没有,但这取决于您的硬件”。您可以通过以下方式进行检查:
bool le = BitConverter.IsLittleEndian;
根据这句话,您可能希望反转缓冲区的某些部分。另外,乔恩斯基特具有特定端转换这里(寻找EndianBitConverter)。
请注意,例如,钛是大端的。大多数英特尔都是低端的。
是特定的UDP / IP ...吗?
TA贡献1803条经验 获得超3个赞
您需要了解网络字节顺序以及CPU字节序。
通常,对于TCP / UDP通讯,您总是使用htons函数(和ntohs和它们及其相关函数)将数据转换为网络字节顺序。
通常,网络顺序为高位优先,但在这种情况下(出于某种原因!),通信是低位优先,因此这些功能不是很有用。这很重要,因为您不能假设它们实现的UDP通讯遵循任何其他标准,如果您使用的是大端架构,这也将给您带来生活上的困难,因为您无法按需包装所有内容htons:-(
但是,如果您使用的是Intel x86架构,那么您已经是低位字节序了,因此只需发送数据而无需进行转换。
- 3 回答
- 0 关注
- 482 浏览
添加回答
举报