在允许我们通过UDP/IP控制它的硬件文档中,我发现了以下片段:
在这种通信协议中,DWORD是4字节数据,WORD是2字节数据,BYTE是单字节数据.存储格式为小端,即4字节(32位)数据存储为:d7-d0,d15-d8,d23-d16,d31-d24; 双字节(16位)数据存储为:d7-d0,d15-d8.
我想知道这是如何转换为C#的?在发送之前我是否必须转换内容?例如,如果我想发送32位整数或4个字符的字符串?
C#本身没有定义字节序.但是,无论何时转换为字节,您都可以做出选择.该BitConverter类有一个IsLittleEndian场告诉你这将如何表现,但它不给的选择.BinaryReader/BinaryWriter也是如此.
我的MiscUtil库有一个EndianBitConverter类,允许你定义字节序; BinaryReader/Writer有类似的等价物.没有在线使用指南我很害怕,但它们是微不足道的:)
(EndianBitConverter还有一个功能,它在普通的BitConverter中不存在,它在字节数组中就地进行转换.)
你也可以使用
IPAddress.NetworkToHostOrder(...)
简而言之,int或long.
Re little-endian,简短的回答(我需要做什么)是"可能不是,但这取决于你的硬件".您可以查看:
bool le = BitConverter.IsLittleEndian;
根据这说明,您可能想要反转部分缓冲区.或者,Jon Skeet 在这里有特定的端序转换器(寻找EndianBitConverter).
请注意,itaniums(例如)是big-endian.大多数英特尔都是小端的.
重新具体的UDP/IP ......?