Pourquoi Guid.ToByteArray () commande-t-il les octets comme il le fait?

Lorsque vous appelez ToByteArray() sur un GUID dans .NET, le classement des octets dans le tableau résultant n’est pas ce que vous attendez par rapport à la représentation sous forme de chaîne du GUID. Par exemple, pour le GUID suivant représenté sous forme de chaîne:

 11223344-5566-7788-9900-aabbccddeeff 

Le résultat de ToByteArray() est le suivant:

 44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF 

Notez que l’ordre des quatre premiers octets est inversé. Les octets 4 et 5 sont également échangés et les octets 6 et 7 sont échangés. Mais les 8 derniers octets sont dans le même ordre que dans la chaîne.

Je comprends que cela se produit. Ce que je voudrais savoir, c’est pourquoi .NET le gère de cette manière.

Pour référence, vous pouvez voir une discussion et une confusion à ce sujet (atsortingbution incorrecte aux bases de données Oracle) ici et ici .

Si vous lisez la section Exemples du constructeur GUID , vous trouverez votre réponse:

Guid(1,2,3,new byte[]{0,1,2,3,4,5,6,7}) crée un Guid qui correspond à "00000001-0002-0003-0001-020304050607" .

a est un entier de 32 bits, b est un entier de 16 bits, c est un entier de 16 bits et d est simplement de 8 octets.

Étant donné a , b et c sont des types entiers plutôt que des octets bruts, ils sont soumis à la commande endian lorsqu’ils choisissent de les afficher. La RFC pour GUID (RFC4122) stipule qu’ils doivent être présentés au format big endian.