Comment faire pour convertir un int en little endian tableau d'octets?
J'ai cette fonction en C# pour convertir un little endian tableau d'octets à un nombre entier:
int LE2INT(byte[] data)
{
return (data[3] << 24) | (data[2] << 16) | (data[1] << 8) | data[0];
}
Maintenant, je veux me reconvertir en little endian..
Quelque chose comme
byte[] INT2LE(int data)
{
//...
}
Une idée?
Grâce.
Vous devez vous connecter pour publier un commentaire.
Juste à l'inverse, de l'
Notez que ce code (comme les autres) ne fonctionne que sur une little Endian machine.(edit - que c'était faux, puisque ce code renvoie LE par définition)La
BitConverter
classe peut être utilisée pour le présent, et bien sûr, il peut également être utilisé à la fois peu et big endian systèmes.Bien sûr, vous aurez à garder une trace de la endianness de vos données. Pour les communications, par exemple, ce serait définie dans le protocole.
Vous pouvez ensuite utiliser la
BitConverter
classe de convertir un type de données dans un tableau d'octets, et vice-versa, et ensuite utiliser leIsLittleEndian
drapeau pour voir si vous avez besoin de convertir il sur votre système ou non.La
IsLittleEndian
drapeau vais vous raconter l' endianness du système, de sorte que vous pouvez l'utiliser comme suit:C'est à partir de la page MSDN sur le
BitConverter
classe.Vous pouvez trouver l'article complet ici.
Espère que cela aide quelqu'un de venir ici 🙂
Juste de le faire dans le sens inverse:
Pourriez-vous utiliser le BitConverter classe? Il ne fonctionne que sur little endian matériel je crois, mais il devrait répondre à la plupart de le levage lourd pour vous.
Ce qui suit est un exemple artificiel qui illustre l'utilisation de la classe:
En fonction de ce que vous êtes en train de faire, vous pouvez compter sur de laisser le cadre de manipuler les détails de l'endianness pour vous en utilisant IPAddress.HostToNetworkOrder et de la fonction reverse. Alors utilisez simplement la BitConverter classe pour aller vers et à partir des tableaux d'octets.
Vous pouvez l'utiliser si vous ne voulez pas utiliser les nouvelles allocations de tas: