Я работаю на компьютере Intel (Win7 64-bit) и, согласно тому, что я прочитал, 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-Endian .
Имеет ли это какое-либо отношение к 64-битной ОС? Есть идеи?
EDIT:
Мой коллега, который сидит напротив меня, прошел тот же тест (32-разрядная версия Windows Vista) и получил те же результаты
РЕДАКТИРОВАТЬ 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
Но как только я удаляю Console.WriteLine, это снова false .
Я также могу добавить, что даже если я сломаю "Console.WriteLine", IsLittleEndian == true, но если я удалю строку вообще, это false.
РЕДАКТИРОВАТЬ 3:
Как отметил Марк Гравелл, это должно быть ошибка времени. Если я использую переменную BitConverter.IsLittleEndian, она инициализируется, если я не делаю (и смотрю на нее при взломе), она не инициализируется и, таким образом, false ...