gpt4 book ai didi

c# - IsLittleEndian 字段报错,但一定是Little-Endian?

转载 作者:IT王子 更新时间:2023-10-29 04:38:35 26 4
gpt4 key购买 nike

我在 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 应该反射(reflect)系统正在使用的字节序,当我在 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...

最佳答案

我想知道这是否是一个计时错误,也许与“beforefieldinit”有关...您如何看待该值?类型初始化器(对于 BitConverter)可能没有被 VS 调试器触发(可以这么说,它在幕后偷看)。特别是因为 false 是字段的默认值...

静态构造函数中设置了IsLittleEndian静态字段;初始化器执行的时间……很难预测。如果您使用的是调试器,那么一切都将失败。可靠地检查此字段值的唯一方法是通过代码(当 CLR 将在需要它之前的某个时刻运行初始化程序时):

bool isLittleEndian = BitConverter.IsLittleEndian;

不要相信调试器/监 window 口等

关于c# - IsLittleEndian 字段报错,但一定是Little-Endian?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2023672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com