В приведенном ниже коде, почему 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
является ложным. Если мой компьютер большой эндиан, почему это происходит?
- Это 64-разрядная машина Windows 7.
- Intel Core2 Quad Q9400 2.66 GHz LGA 775 95W Quad-Core Processor Модель BX80580Q9400
- SUPERMICRO 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