Endianness swap sans ah

Je suis en train d'écrire un ELFE de l'analyseur, mais j'ai un peu de mal à convertir endianness correctement. J'ai des fonctions pour déterminer le boutisme de l'analyseur et les endiannness de l'objet fichier.

Fondamentalement, il existe quatre scénarios possibles:

  1. Un big endian compilé analyseur de s'exécuter sur un big endian fichier objet
    • rien ne doit converti
  2. Un big endian compilé analyseur de s'exécuter sur un little endian fichier objet
    • l'ordre des octets besoins échangés, mais ah/l() et htons/l() sont nulles les macros sur une machine big endian, de sorte qu'ils n'inverser l'ordre des octets. C'est le problème
  3. Un little endian compilé analyseur de s'exécuter sur un big endian fichier objet
    • l'ordre des octets besoins échangé, afin de l'utiliser htons() pour inverser l'ordre des octets
  4. Un little endian compilé analyseur de s'exécuter sur un little endian fichier de l'objet.
    • rien ne doit converti

Est-il une fonction que je peux utiliser explicitement swap d'octets de commande/de changement de l'endianness, depuis ah/l() et htons/l() prennent de l'hôte endianness en compte et parfois ne pas convertir? Ou dois-je trouver/écrire mon propre permuter l'ordre des octets de la fonction?

OriginalL'auteur xdumaine | 2012-04-26