Convertir little endian vers big endian [Résolu]

Signaler
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Bonjour,

Lors d'un projet je dois programmer un serveur TCP/IP en C++ qui échange des télégrammes avec un client.
Le problème est que le client m'envoi un telegramme du type
struct data
{
int toto;
float tata;
char titi;
}

mais sa structure est "définie" en little endian.

J'ai peur d'avoir une inversion de bits, y a t'il une fonction permettant de switcher ma structure entière?

merci de votre aide!



 

5 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
12
Salut,
Sur un PC avec Windows c'est Little Endian. Car en fait, il y a deux niveaux. Le processeur et le système d'exploitation. Les processeurs Intel, donc ceux d'un PC, sont tous Little Endian alors que d'autres comme chez Motorola sont Big Endian. Windows est lui aussi Little Endian. C'est un choix fait pendant la conception du système d'exploitation. Microsoft aurait pu opté pour le Big Endian car avec leur système de gestion de la mémoire virtuelle ils avaient le choix. Cependant, l'accès physique à la mémoire avec les processeurs Intel se fait toujours en Little Endian.
Il y a trois fonctions permettant de convertir un nombre en Little ou Big Endian:
_byteswap_ushort()
_byteswap_ulong()
_byteswap_uint64()
Pour les float, il est possible de le garder tel qu'il est ou sinon utiliser _byteswap_ulong(). Pour les double se serait _byteswap_uint64().
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
Personne?

dites moi au moins si c'est possible, je stress là!
ya pas une fonction C++ qui permettent l'inversion de bits même si ej dois faire ça entier par entier, ou float par float?


 
Messages postés
1107
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
10 juillet 2018
4
je ne sais pas comment ca marche surtout avec les float.

Vu que tu fais du réseau, tu peux peut-etre les fonctions Host to Network :
htons/ntohs (short)
htonl/ntohl

"mais sa structure est "définie" en little endian. "

En quoi est-ce un problème ? Tu as un processeur big endian ?
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
Ben par défaut sur un PC normal c'est comment? Big ou Little, je t'avoue que j'ai un gros doute là! si ça se trouve je me prend le choux pour rien!


 
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
Super! je te remercie, j'avoue avoir pris peur mais en fait, j'avais confondu et oublier mes cours ;-)
Du coup je n'aurais pas besoin de conversion ! mais merci pour les fonctions elles pourront un jour m'être utile.

Merci encore à vous.