我在英特尔计算机(Win7 64位)上运行,根据我读到的,英特尔正在使用Little-Endian.我在C#中尝试使用以下代码:
byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);
Run Code Online (Sandbox Code Playgroud)
和Little-Endian预期的b2short == 256.
然后我在.NET中读到,BitConverter.IsLittleEndian应该反映系统正在使用的endian,当我在Visual Studio中检查变量时,它报告为false,即它不是Little-Endian.
这与64位操作系统有什么关系吗?有任何想法吗?
编辑:我的同事,坐在我对面,做了相同的测试(Win Vista 32位),得到了相同的结果
编辑2:这真的很奇怪.每当我运行代码,并在BitConverter完成它之后中断,IsLittleEndian == false.但是,如果我添加行Console.WriteLine(BitConverter.IsLittleEndian); 之后它是真的:
byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);
Console.WriteLine(BitConverter.IsLittleEndian);
// Now the IsLittleEndian is true
Run Code Online (Sandbox Code Playgroud)
但是,一旦我删除Console.WriteLine命令是假的一次.
我还可以补充一点,即使我在"Console.WriteLine"上打破了IsLittleEndian == true,但如果我完全删除该行则为false.
编辑3:正如Mark Gravell所指出的,这必定是一些时间错误.如果我使用变量BitConverter.IsLittleEndian它被初始化,如果我不(并在破坏时看它)它没有初始化,因此假 ...
Mar*_*ell 20
我想知道这是否是一个时间错误,可能与"beforefieldinit"有关......你怎么看价值?类型初始化器(for BitConverter)可能没有被VS调试器触发(可以说是在封面下偷看).特别是因为false是字段的默认值...
该IsLittleEndian静态字段设置在静态构造函数; 和初始化程序执行的时间......很难预测.如果您使用的是调试器,则所有投注均已关闭.可靠地检查该字段值的唯一方法是通过代码(当CLR在需要之前的某个时刻运行初始化程序时):
bool isLittleEndian = BitConverter.IsLittleEndian;
Run Code Online (Sandbox Code Playgroud)
不要相信调试器/监视窗口等.