begin process at 2012 05 28 23:14:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

Convertir little endian vers big endian


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Convertir little endian vers big endian

mercredi 25 août 2010 à 14:10:55 | Convertir little endian vers big endian

LaTatadu91

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!



 
jeudi 26 août 2010 à 11:00:35 | Re : Convertir little endian vers big endian

LaTatadu91

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?


 
jeudi 26 août 2010 à 11:25:20 | Re : Convertir little endian vers big endian

fregolo52

Membre Club
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 ?
jeudi 26 août 2010 à 11:31:41 | Re : Convertir little endian vers big endian

LaTatadu91

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!


 
jeudi 26 août 2010 à 13:02:09 | Re : Convertir little endian vers big endian

racpp

Administrateur CodeS-SourceS
Réponse acceptée !
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().
jeudi 26 août 2010 à 13:05:31 | Re : Convertir little endian vers big endian

LaTatadu91


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.

 


Cette discussion est classée dans : client, convertir, big, little, endian


Répondre à ce message

Sujets en rapport avec ce message

Little Endian vers BigEndian impossible ! [ par minos164 ] Voici mon codeunsigned char * bloc[]; // variable bloc = tamponFILE * flux_source;flux_source = fopen("test.jpc","rb");fread(bloc,2,1,flux_source);pri little/big endian + enumeration [ par ramones ] Bonjour,Connaissez vous un moyen pour swapper les octets de poids faible et de poid fort dans la memoire sous visual C? Il s'agit en fait d'organiser fenetre et zone dessinable [ par pounch ] Bonjour à tous,actuellement je travail sur un logiciel de skin de windows, mais pour l'instant j'ai un bug assez chiant.En effet lorsque je skin ma fe multi thread avec librairie phtread -> help please [ par davwart ] Hello all.j'essaie de faire un chat en mode console en utilisant la librairie pthread.h.mon serveur a une fonction main qui lance un thread d'ecoute e convertir char* int [ par Hades53 ] Voila je voudrais savoir comment convertir un char* qui contient des nombre en intchar*x;int y;x = "56";je veux que y = 56 , pouvez vous m'aider ? lanceer un prog externe : HELP ! [ par ben01n ] je suis en train de devlopper une application client-serveur (voir ma source intitulée : client-serveur en udp multicast) sous gcc (linux)pour diverse Pourkoi ki marche pas mon temps?? [ par MoDDiB ] voila j'ai un client et un serveur sur directplay .. mon client est win32 alors ke le serveru est une appli console..J'utilise timegettime() pour chop convertir une image de 256 en 1024 niveau de gris [ par pirate75000 ] comment convertir une image de 256 niveau de gris 8 bits en une image de 1024 ou 2048 niveau de grisen 10 ou 12 bits Convertir un int compris entre 0 et 9 en char ? [ par Onclick666 ] Bonjour,Je voudrais convertir un int compris entre 0 et 9 en char. Y a t il une fonction en C qui permette de faire cela.Merci d'av,Onclick Client/Serveur - Multiutilisateur [ par jsonor ] Bonjour à tous,Je cherche à faire un prog client/serveur en c++ avec un serveur qui puisse gérer la connexion d'un ou plusieurs client...J'ai pu voir


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales