Реверсивный порядок байтов в .NET
В приведенном ниже коде, почему X и Y принимают значения, отличные от того, что я думаю интуитивно?
Если байты 0-7 записываются в буфер, не должны ли получающиеся длинные байты иметь одинаковый порядок? Это похоже на чтение длинных значений в обратном порядке.
x 0x0706050403020100 long
y 0x0706050403020100 long
z 0x0001020304050607 long
MemoryStream ms = new MemoryStream();
byte[] buffer = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
ms.Write(buffer, 0, buffer.Length);
ms.Flush();
ms.Position = 0;
BinaryReader reader = new BinaryReader(ms);
long x = reader.ReadInt64();
long y = BitConverter.ToInt64(buffer, 0);
long z = BitConverter.ToInt64(buffer.Reverse<byte>().ToArray<byte>(), 0);
byte[] xbytes = BitConverter.GetBytes(x);
byte[] ybytes = BitConverter.GetBytes(y);
byte[] zbytes = BitConverter.GetBytes(z);
(Я не знаю, что пометить этот вопрос, кроме .NET.)
BitConverter.IsLittleEndian
ложно Если мой компьютер с прямым порядком байтов, почему это происходит?
Это Windows 7 64-битная машинаЧетырехъядерный процессор Intel Core2 Quad Q9400 с частотой 2,66 ГГц LGA 775 95 Вт Модель BX80580Q9400SUPERMICRO MBD-C2SBX + -O LGA 775 Intel X48 ATX Материнская плата IntelРезультаты этого кода (в ответ на комментарий Джейсона):
byte[] buffer = new byte[] { 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
long y = BitConverter.ToInt64(buffer, 1);
Console.WriteLine(BitConverter.IsLittleEndian);
Console.WriteLine(y);
Результат:
False
506097522914230528