如果BIGENDIAN在编译时没有得到解决,为什么它是一个指令呢?

时间:2015-09-23 18:06:39

标签: c# .net c-preprocessor directive endianness

请原谅可怜的措辞,但我找不到更好的解释方法。

根据我的理解,C#是一种WORA语言 - 你可以在一台机器上编写它并将它部署到另一台机器上,因为在实际运行应用程序之前不会编译MSIL。

那么为什么BitConverter.IsLittleEndian被定义为like so

#if BIGENDIAN
    public static readonly bool IsLittleEndian /* = false*/;
#else
    public static readonly bool IsLittleEndian = true;
#endif

BIGENDIAN这里是一个预处理程序指令,这意味着它在编译时被解析。因此,如果开发人员的计算机是小端,并且目标使用大端, IsLittleEndian仍会在目标计算机上报告true吗?

1 个答案:

答案 0 :(得分:3)

不,它会按预期工作。它工作的原因是因为目标系统上安装的.NET运行时是为该目标系统构建/编译的,因此它的BitConverter.IsLittleEndian属性将返回false。您的代码只是引用该属性,因此直到运行时才会确定。