当前位置:  开发笔记 > 编程语言 > 正文

C#little endian还是big endian?

如何解决《C#littleendian还是bigendian?》经验,为你挑选了3个好方法。

在允许我们通过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个字符的字符串?



1> Jon Skeet..:

C#本身没有定义字节序.但是,无论何时转换为字节,您都可以做出选择.该BitConverter类有一个IsLittleEndian场告诉你这将如何表现,但它不给的选择.BinaryReader/BinaryWriter也是如此.

我的MiscUtil库有一个EndianBitConverter类,允许你定义字节序; BinaryReader/Writer有类似的等价物.没有在线使用指南我很害怕,但它们是微不足道的:)

(EndianBitConverter还有一个功能,它在普通的BitConverter中不存在,它在字节数组中就地进行转换.)


还记得在C#中可以直接复制值,例如*ptr = value; 在这种情况下,您应该关注计算机体系结构的字节顺序.

2> Jan Banniste..:

你也可以使用

IPAddress.NetworkToHostOrder(...)

简而言之,int或long.



3> Marc Gravell..:

Re little-endian,简短的回答(我需要做什么)是"可能不是,但这取决于你的硬件".您可以查看:

bool le = BitConverter.IsLittleEndian;

根据这说明,您可能想要反转部分缓冲区.或者,Jon Skeet 在这里有特定的端序转换器(寻找EndianBitConverter).

请注意,itaniums(例如)是big-endian.大多数英特尔都是小端的.

重新具体的UDP/IP ......?

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有