C embarqué inversin d'octets

Link31 -  
 Link12 -
Bonjour,
J'ai un problème sur du C embarqué. J'utilise un simulateur d'OS avec un compilateur GCC (cygwin). Le simulateur est censé simuler une execution sur une cible powerPC750Cxe. dans mon code j'utilise une structure pour stocker des données (octets) que je reçois sur un reseau ethernet; et mon problème est que dans tous les champs de ma structure les lsb et les msb sont inversés. Exemple : j'envoie à mon appli en hexa 0xCAFEDECA la donné 32 bit stockée dans ma structure ou meme ma variable (type entier 32) est 0xCADEFECA. Auriez vous une idée d'où cela peut venir?
A voir également:

2 réponses

Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   54
 
Bonjour, c'est un problème d'endianness https://en.wikipedia.org/wiki/Endianness entre les deux machines. Je ne sais pas comment vous envoyez les données et les recevez mais le problème vient de là à mon avis. Créez un protocole pour vos données ne les envoyez&recevez pas directement dans les sockets tel quel, pour les char ça passe mais les int etc..
Pouvez faire le test de conversion big et little endian là : http://www.darkfader.net/toolbox/convert/ en utilisant la section "Integer, IPv4 address"

Edit : café déca c'était au pif ou voulut ?
0
Link12
 
Effectivement tu as raison c'est un problème d'endianness, j'ai eu la confirmation des personnes qui ont fait l'outil de simulation du hard. incompatibilité entre le hard simulé et le PC.

Pour le CAFEDECA c'est fait exprès, c'était pour identifier la façon dont les digits sont arrangé.
0