Inverser l'ordre des octets dans .NET

Dans le code ci-dessous, pourquoi faire X et Y prendre différentes valeurs que ce que je pense intuitivement?

Si les octets 0 à 7 sont écrites dans la mémoire tampon, ne faut-il pas la résultante de temps avez-octets dans le même ordre? C'est comme la lecture de la longue valeurs dans l'ordre inverse.

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);

(Je ne sais pas quoi balise à cette question, au-delà de juste .NET.)


BitConverter.IsLittleEndian

est faux. Si mon ordinateur est en big endian, pourquoi est-ce arrivé?

  • C'est un Windows 7 64-bit machine
  • Intel core 2 Quad Q9400 2.66 GHz LGA 775 95W Quad-Core, Modèle de Processeur BX80580Q9400
  • SUPERMICRO MBD-C2SBX+-O LGA 775 Intel X48 ATX la carte Mère Intel

Les résultats de ce code (en réponse à Jason commentaire):

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);

Résultat:

False
506097522914230528

source d'informationauteur Amy