Im работает на компьютере Intel (Win7 64-bit), и в соответствии с тем, что я читаю, Intel использует Little-Endian. Я пробую это в С# со следующим кодом:
byte[] b2 = new byte[] { 0, 1 };
short b2short = BitConverter.ToInt16(b2, 0);
и b2short == 256, как и ожидалось от Little-Endian.
Затем я прочитал, что в .NET BitConverter.IsLittleEndian должен отражать, какой endian использует система, и когда я проверяю переменную в Visual Studio, она сообщает false, то есть это НЕ Маленькая- Endian.
Это имеет какое-либо отношение к 64-битной ОС? Любые идеи?
EDIT: Мой коллеж, который сидит напротив меня, сделал тот же тест (Win Vista 32-бит) и получил те же результаты
ИЗМЕНИТЬ 2: Это ДЕЙСТВИТЕЛЬНО странно. Всякий раз, когда я запускаю код и ломаюсь после того, как битконвертер сделал свое дело, 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: Как отметил Марк Гравелл, это должно быть некоторая временная ошибка. Если я использую переменную BitConverter.IsLittleEndian, она инициализируется, если я не (и смотрю на нее при разрыве), ее не инициализируется и, следовательно, false...