Convertir little endian vers big endian [Résolu]

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

5 réponses

Répondre au sujet
racpp 1910 Messages postés vendredi 18 juin 2004Date d'inscription 14 novembre 2014 Dernière intervention - 26 août 2010 à 13:02
+3
Utile
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().
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de racpp
LaTatadu91 968 Messages postés jeudi 20 mai 2004Date d'inscription 26 avril 2013 Dernière intervention - 26 août 2010 à 11:00
0
Utile
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
fregolo52 1106 Messages postés mercredi 15 juin 2011Date d'inscription 19 juillet 2016 Dernière intervention - 26 août 2010 à 11:25
0
Utile
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
LaTatadu91 968 Messages postés jeudi 20 mai 2004Date d'inscription 26 avril 2013 Dernière intervention - 26 août 2010 à 11:31
0
Utile
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
LaTatadu91 968 Messages postés jeudi 20 mai 2004Date d'inscription 26 avril 2013 Dernière intervention - 26 août 2010 à 13:05
0
Utile
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.