Question

BitConverter.ToUInt16 () s'attend à ce que les octets soient inversés, je suppose que c'est comme ça qu'ils sont stockés en mémoire. Mais comment puis-je le convertir quand il n’est pas inversé, sans modifier le tableau?

Byte[] ba = { 0, 0, 0, 6, 0, 0 };
BitConverter.ToUInt16(ba, 2); // is 1536/0x0600, but I want 6/0x0006
Était-ce utile?

La solution

On dirait que vous voulez mon EndianBitConverter dans MiscUtil , qui vous permet de spécifier si vous voulez utiliser un grand ou un petit endianisme.

En gros, il fournit les mêmes fonctionnalités que BitConverter mais en tant que méthodes d'instance. Vous obtenez alors le type approprié de EndianBitConverter et faites ce que vous voulez avec.

(Il offre un peu plus de fonctionnalités pour travailler efficacement avec les tableaux, ce qui peut vous être utile ou non.)

La bibliothèque est en source ouverte sous une licence assez permissive.

Autres conseils

Vous pouvez également utiliser IPAddress.HostToNetworkOrder.

Je pense que votre meilleur appel serait d'inverser le tableau avec la méthode Array.Reverse.

http: // msdn. microsoft.com/en-us/library/system.array.reverse(VS.71).aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top