Moyen rapide de swap d'octets dans la gamme de big endian à little endian en C#
Je suis en train de lire à partir d'un flux binaire qui est big-endian. Le BitConverter classe le fait automatiquement. Malheureusement, la virgule flottante conversion j'ai besoin n'est pas la même que BitConverter.ToSingle(byte[]) donc, j'ai mon propre routine à partir d'un co-travailleur. Mais l'input byte[] doit être en little-endian. Quelqu'un aurait-il un moyen rapide de convertir boutisme d'un byte[] tableau. Bien sûr, je pourrais swap de chaque octet, mais il y a eu un truc. Merci.
OriginalL'auteur initialZero | 2009-10-21
Vous devez vous connecter pour publier un commentaire.
Voici une méthode rapide pour le changement d'endianess pour les célibataires dans un tableau d'octets:
Un Seul est de quatre octets. Donc, est-ce que vous n'avez pas d'octets ou qu'ils ne représentent pas un Seul?
OriginalL'auteur Guffa
- Je utiliser LINQ:
Vous pouvez également
.Skip()
et.Take()
au contenu de votre coeur, ou bien utiliser un index dans la BitConverter méthodes.Array.Reverse()
est une ancienne façon de faire.Rapide à mettre en œuvre? Peut-être. Rapide au moment de l'exécution? Probablement pas.
Tableau.Inverse modifie le tableau d'origine, tandis que .Reverse().ToArray() crée un nouveau tableau. La différence est énorme. Rien au sujet d'une ancienne ou la nouvelle façon de faire.
Je voulais dire "ancien" dans, si vous êtes en utilisant un .NET avant LINQ et donc .Reverse().ToArray(). Mais bonne idée de clarifier, pour les gens de la différence.
OriginalL'auteur Pat
Qu'est la routine de votre collègue? Si elle accède à des octets explicitement, vous pouvez changer le code (ou plutôt, de créer une méthode pour big-endian données) au lieu d'inverser les octets.
Jon, n'est-ce pas MiscUtil ont un EndianBitConverter?
Il le fait, et cela a été ma première pensée, mais il semble que c'est un problème différent.
Il n'est pas clair du tout ce que tu veux dire, j'en ai peur. Si vous avez une routine qui s'attend à little-endian données, pourquoi ne pouvez-vous pas créer une version alternative qui s'attend à ce big-endian données?
Oui, je viens de trouver MiscUtil et je suis à la recherche à la source. Merci.
OriginalL'auteur Jon Skeet