Conversion de tableau d'octets en formats de type Int en c #
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
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