【发布时间】:2011-01-02 16:18:55
【问题描述】:
我在 Intel 计算机(Win7 64 位)上运行,根据我阅读的内容,Intel 正在使用 Little-Endian。我在 C# 中使用以下代码进行了尝试:
byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);
和 b2short == 256 正如 Little-Endian 所期望的那样。
然后我在 .NET 中读到,BitConverter.IsLittleEndian 应该反映系统使用的字节序,当我在 Visual Studio 中检查变量时,它会报告 false,即它不是 Little-字节序。
这与 64 位操作系统有关吗?有什么想法吗?
编辑: 坐在我对面的同事做了同样的测试(Win Vista 32 位)并得到了同样的结果
编辑 2: 这真的很奇怪。每当我运行代码并在 BitConverter 完成操作后中断时,IsLittleEndian == false。 但是,如果我添加行 Console.WriteLine(BitConverter.IsLittleEndian); 之后它是 TRUE:
byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);
Console.WriteLine(BitConverter.IsLittleEndian);
// Now the IsLittleEndian is true
但是一旦我删除 Console.WriteLine 它又是 false。
我还可以补充一点,即使我在“Console.WriteLine”上中断 IsLittleEndian == true,但如果我完全删除该行,它就是 false。
编辑 3: 正如 Mark Gravell 指出的那样,这一定是一些时间错误。如果我使用变量 BitConverter.IsLittleEndian 它被初始化,如果我不(并且在中断时查看它)它没有被初始化,因此 false...
【问题讨论】:
-
它是哪个英特尔?会不会是IA64?尽管我确信即使在 IA64 上它也可能使用 LE。
-
重新使用 Console.WriteLine - 请参阅我关于“beforefieldinit”的观点...
-
我使用的是 Intel i920 处理器...