La classe BitConverter
peut être utilisé pour cela, et bien sûr, il peut également être utilisé sur les deux systèmes endian petits et grands.
Bien sûr, vous devrez suivre l'endianness de vos données. Pour les communications par exemple, cela serait défini dans votre protocole.
Vous pouvez alors utiliser la classe BitConverter
pour convertir un type de données dans un tableau d'octets et vice-versa, puis utilisez le drapeau IsLittleEndian
pour voir si vous avez besoin de le convertir sur votre système ou non.
Le drapeau IsLittleEndian
vous dira la boutisme du système, de sorte que vous pouvez l'utiliser comme suit:
Ceci est de la page MSDN sur la classe BitConverter
.
int value = 12345678; //your value
//Your value in bytes... in your system's endianness (let's say: little endian)
byte[] bytes = BitConverter.GetBytes(value);
//Then, if we need big endian for our protocol for instance,
//Just check if you need to convert it or not:
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes); //reverse it so we get big endian.
Vous pouvez trouver l'article complet here.
Hope this helps quelqu'un venir ici :)
Pourquoi votre travail par exemple que sur un petit machine -endienne?AFAIK la méthode de décalage de bits devrait être endian-agnostique. – nonoitall
@John, je suis à peu près sûr que le code fonctionne bien que le code fonctionne sur une architecture big- ou little-endian. Dans les deux cas, b [0] est l'octet d'ordre le plus bas, b [1] est l'octet d'ordre le plus bas, et ainsi de suite. –
Mon erreur, puisque ce code renvoie LE plutôt que l'ordre naturel des octets du cpu sous-jacent, il fonctionnera sur toutes les architectures. Je vais supprimer le texte incorrect. –