哪种.Net兼容架构不是小端?

时间:2010-09-10 14:52:35

标签: .net

BitConverter类有一个字段IsLittleEndian,根据文档:

  

表示数据存储在此计算机体系结构中的字节顺序(“endianness”)。

我注意到在Reflector中,该字段在BitConverter的静态构造函数中被硬编码为true。

所以我的问题是,在使用BitConverter时我是否需要考虑IsLittleEndian - 换句话说,是否有在big-endian平台上运行的.Net实现?如果没有,首先是该领域的目的是什么?

6 个答案:

答案 0 :(得分:3)

.NET Micro Framework运行的某些系统是(或可能是......)big-endian。 Version 4.1 introduced support for big-endian architectures

你可能知道你是否在运行微框架,但是......

答案 1 :(得分:3)

.Net Micro Framework 4.1支持big-endian - Source

答案 2 :(得分:3)

CLI标准不会禁止任何特定的Endianness,因此如果您希望程序是可移植的,则依赖于特定的字节顺序...除非当然特定情况下需要字节排序,例如使用一些数据交换协议(感谢用户Moof指出这一点)。

  

从CLI注释标准(第161页) - 分区I,第12.6.3节:“字节顺序”:

     

对于大于1个字节的数据类型,字节顺序取决于目标CPU。依赖于字节排序的代码可能无法在所有平台上运行。 [...]

我怀疑您在Reflector中看到IsLittleEndian的硬编码值,因为当您在计算机上下载/安装.NET Framework时,该特定安装包针对特定平台(例如Intel x86,这是Little Endian。)

我可以想象.NET框架的其他安装包有IsLittleEndian硬连接以返回不同的值,具体取决于特定安装所针对的平台。

答案 3 :(得分:2)

取决于“.Net实施”的含义。我不了解适用于big-endian平台的Microsoft .NET Framework版本(但请参阅其他答案)。但如果您的意思是CLI / CLR,那么MonoDotGNU都有大端机器的版本。 Mono至少在Sparc上的Solaris 10和PowerPC上的Mac OS X上运行。 DotGNU拥有更广泛的可用平台列表。

答案 4 :(得分:1)

如果您是MSIL,则无法获得该保证。

即使对于所有当前架构都是如此,您也无法保证我明天不会将.NET移植到Alpha或PDP11。

答案 5 :(得分:0)

XBox360是BigEndian。来自Microsoft的Robert Unoki对于检查IsLittleEndian标志的重要性有一个很好的blog post - 以及当微软开发人员没有这样做时将CLR移植到XBox360时发生的错误。