L'appui de l'octet de commande sous Linux de l'espace utilisateur

Je suis en train d'écrire un programme sous Linux en C pour analyser les fichiers de base produites à partir d'un système embarqué. Les fichiers de base peut être en little endian (BRAS) ou big endian (MIPS), et le programme à analyser peut être en cours d'exécution sur un little endian hôte (x86) ou big endian (PowerPC).

Par examiner les en-têtes je sais pas si le noyau est LE ou. Je préfère mon programme pas besoin de savoir si la machine sur laquelle il s'exécute sur est little ou big endian, je voudrais utiliser une API pour gérer cela pour moi. Si il n'y a pas de meilleure option, je crois que je vais commencer à compter sur les #ifdef __BIG_ENDIAN__.

Dans le noyau Linux, nous avons cpu_to_le32 et al pour convertir à partir des octets de commande à little endian, etc. Dans l'espace utilisateur, il est htonl et al, qui convertir de natif en big endian, mais pas d'équivalent pour les natifs de little endian que je peux trouver.

Quelqu'un peut-il suggérer API pour l'utilisateur de l'espace?

Modifier: Juste pour être clair, je suis à la recherche d'une API qui sait déjà que mon CPU est en big ou little endian et des swaps de revoir en conséquence. Je ne veux pas avoir de la litière de mon code avec #ifdefs pour cela. Je ne suis pas tout simplement à la recherche pour les extraits de code pour le swap d'octets; merci pour ces, mais ce n'était pas le point.

Mais avec ces extraits de code, vous pouvez trivialement écrire une macro qui fait que, par conséquent, de la création de votre propre "API", non?
Ce genre de système embarqué est-il? Ne pouvez-vous pas simplement utiliser quelques croix gdb pour regarder les fichiers de base?
Pourrais-je écrire mon propre API? Assurez-vous. Je veux juste éviter de #ifdef BIG_ENDIAN si il y a un plus propre, plus facile à gérer façon de le faire via une API existante qui sait déjà que mon CPU est en big ou little endian.
Comme pour ce genre de système embarqué est: son tout à fait normal et ennuyeux PowerPC. J'ai déjà un cross-compilé gdb. gdb est grande pour beaucoup de choses, mais pas tout. Par exemple, il est spectaculairement mauvais à la recherche de la totalité de la mémoire pour un motif particulier; vous écrire un gdb macro qui prend une éternité et un jour pour terminer la recherche d'un moyen de taille de fichier de base.

OriginalL'auteur DGentry | 2009-05-17