Comment vérifier si un système est big endian ou little endian?Comment vérifier si un système est big endian ou little endian?
Répondre
Si vous utilisez .NET: Vérifiez la valeur de BitConverter.IsLittleEndian
.
Un autre code C en utilisant l'union
union {
int i;
char c[sizeof(int)];
} x;
x.i = 1;
if(x.c[0] == 1)
printf("little-endian\n");
else printf("big-endian\n");
Il est même logique que BELWOOD utilisé.
Je pense que ce n'est pas conforme à la norme cependant: vous pouvez seulement lire le champ d'une énumération que vous avez écrit pour un comportement autrement indéfini est possible, ou je me trompe? – worenga
syndicats ne spécifie pas "justifiant" dans la norme. Cette solution n'est pas correcte (elle peut fonctionner accidentellement dans un OS/compilateur spécifique). – jaskmar
Pouvez-vous s'il vous plaît expliquer la logique dans le programme ci-dessus. Si vous initialisez la variable membre i, avec x.1 = 1, alors comment x.c [0] se révèle être 1. Ai-je manqué un point ici? ma compréhension est que l'union prend la mémoire du plus grand type de données et selon ce que nous pouvons y accéder. Un seul membre peut être consulté. Toute réponse sera très appréciée –
A C++ solution:
namespace sys {
const unsigned one = 1U;
inline bool little_endian()
{
return reinterpret_cast<const char*>(&one) + sizeof(unsigned) - 1;
}
inline bool big_endian()
{
return !little_endian();
}
} // sys
int main()
{
if(sys::little_endian())
std::cout << "little";
}
'reinterpret_cast' ne peut pas être utilisé dans une expression constante. –
@ T.C. Gah! Dommage. Thnx :) – Galik
Dans Linux, `
static union { char c[4]; unsigned long mylong; } endian_test = { { 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)
if (ENDIANNESS == 'l') /* little endian */
if (ENDIANNESS == 'b') /* big endian */
en quoi est-ce différent de la version de Neeraj? –
En Python:
from sys import byteorder
print(byteorder)
Je me sens comme c'est la réponse la plus simple et la meilleure, merci! – mdandr
Une seule ligne avec Perl (qui doit être installé par défaut sur presque tous les systèmes):
perl -e 'use Config; print $Config{byteorder}'
Si la sortie commence par 1 (octet le moins significatif), c'est un système little-endian. Si la sortie commence avec un chiffre plus élevé (octet le plus significatif), c'est un système big-endian. Voir la documentation du module Config.
- 1. Little Endian - Big Endian problème
- 2. Little/Big Endian
- 3. Comprendre big endian, little endian (encore)
- 4. Java/Ada Big Endian à Linux Little Endian problèmes
- 5. Trouver si le système est peu endian ou big endian avec perl
- 6. Bitmask Little Endian
- 7. Big-> little (little-> big) conversion endian de std :: vecteur de structures
- 8. Conversion de big-endian en little-endian et vice-versa en VBA
- 9. CIL et JVM Little endian à big endian en C# et java
- 10. Est-ce que ma machine AMD utilise peu endian ou big endian?
- 11. Conversion de little endian en int
- 12. Meilleure approche pour écrire/lire des données binaires dans Little ou Big Endian avec C#?
- 13. (java) Écrire dans le fichier little endian
- 14. Méthode Python pour stocker la liste des octets dans le réseau (big-endian) ordre de byte (little-endian)
- 15. Imiter/émuler un comportement big-endian en C?
- 16. Perl pack utilisation - double big endian?
- 17. comment convertir les nombres big-endian en nombres natifs delphi
- 18. Déballage du numéro de port codé big-endian
- 19. À quelle vitesse la procédure de conversion d'un big endian au petit boutiste est-elle rapide?
- 20. Comment convertir une valeur de l'ordre des octets de l'hôte en little endian?
- 21. Quel est le problème avec cette arithmétique lors de l'utilisation du compilateur SDCC (Little Endian)?
- 22. Comment tester votre code sur une machine avec une architecture big-endian?
- 23. Python fichier Slurp w/conversion endian
- 24. Comment convertir un int en un petit tableau d'octets endian?
- 25. Comment convertir une chaîne en un nombre big-endian 32 bits en Java?
- 26. booster asio et endian
- 27. Comment puis-je empaqueter un int en tant que big endian 32 bits en Perl?
- 28. Tests générés par Pex Encoded UCS-2 Little Endian, Pourquoi, comment changer?
- 29. Quelqu'un peut-il expliquer cette fonction "endian-ness" pour moi?
- 30. Convertir une chaîne brute en un tableau de mots big-endian avec Ruby
Bonne réponse, mais cela fournit un bon diagramme de ce qui se passe: http://stackoverflow.com/a/12792301/803801 – gsingh2011
C'est vraiment un joli diagramme - merci de l'avoir ajouté. – belwood