Convertir little endian vers big endian [Résolu]

Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Dernière intervention
26 avril 2013
- - Dernière réponse : LaTatadu91
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Dernière intervention
26 avril 2013
- 26 août 2010 à 13:05
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!



 
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Dernière intervention
14 novembre 2014
3
Merci
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().

Merci racpp 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de racpp
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Dernière intervention
26 avril 2013
0
Merci
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?


 
Commenter la réponse de LaTatadu91
Messages postés
1108
Date d'inscription
mercredi 15 juin 2011
Dernière intervention
10 juillet 2018
0
Merci
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 ?
Commenter la réponse de fregolo52
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Dernière intervention
26 avril 2013
0
Merci
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!


 
Commenter la réponse de LaTatadu91
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Dernière intervention
26 avril 2013
0
Merci
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.

 
Commenter la réponse de LaTatadu91

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.