Convertir Little Endian à Big Endian

Je veux juste vous demander si ma méthode est correcte pour convertir de en little endian à big endian, juste pour s'assurer que, si je comprends la différence.

J'ai un certain nombre qui est stocké dans little-endian, voici le binaire et hexadécimal représentations du numéro:

0001 0010 0011 0100 0101 0110 0111 1000

12345678

En format big-endian je crois que les octets doivent être échangés, comme ceci:

1000 0111 0110 0101 0100 0011 0010 0001

87654321

Est-ce correct?

Aussi, le code ci-dessous tente de le faire, mais échoue. Est-il rien de manifestement erronée ou puis-je optimiser quelque chose? Si le code est mauvais pour cette conversion pouvez-vous expliquer pourquoi et montrent une meilleure méthode est de faire la même conversion?

uint32_t num = 0x12345678;
uint32_t b0,b1,b2,b3,b4,b5,b6,b7;
uint32_t res = 0;

b0 = (num & 0xf) << 28;
b1 = (num & 0xf0) << 24;
b2 = (num & 0xf00) << 20;
b3 = (num & 0xf000) << 16;
b4 = (num & 0xf0000) << 12;
b5 = (num & 0xf00000) << 8;
b6 = (num & 0xf000000) << 4;
b7 = (num & 0xf0000000) << 4;

res = b0 + b1 + b2 + b3 + b4 + b5 + b6 + b7;

printf("%d\n", res);
  • Vous pouvez utiliser un meilleur exemple de séquence de bits comme "0001 0010 0011 0100 0101 0110 0111 1000"
  • Votre code est-à grignoter à base de (4 bits) au lieu de l'octet de base (8 bits). C'est en prenant une valeur de 32 bits et l'inversion de l'ordre des amuse-gueules. Je pense que vous avez voulu 64 bits des valeurs des octets en fonction. Aussi, les changements ne fonctionne pas depuis ce passage, ne tourne pas. Donc vous perdrez bits "à la fin". Et de la ranger un peu, pensez à utiliser un tableau plutôt discret b1, b2, etc.
  • Je suis en train de faire cette opération en fonction de la tâche suivante: "Un 32 bits valeur numérique représentée par la représentation hexadécimale (st uv wx yz) doit être enregistré dans les quatre octets de terrain (st uv wx yz)." Donc, Si je voudrais faire la même chose mais au lieu de prendre 8 bits (1 octet), cela fonctionnera ?
  • Vos exemples sont 64 bits. Si vous voulait vraiment dire 32 bits?
  • Oui c'est un 32 bits exemple. Il pourrait être mon erreur que j'ai pris 64 bits au lieu de 32 bits. Mais il faut vraiment être de 32 bits.
  • Ne pas faire la conversion vous-même, la plupart des plates-formes offrent des fonctions permettant de faire ceci: htobe32, htonl, etc. si vous voulez la portabilité, l'utilisation d'un en-tête comme ceci.
  • Double Possible de convertir big endian à little endian dans C [sans l'aide fournie func]

InformationsquelleAutor JeckyPorter | 2013-10-09