IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

Conversions big/little endian


Sujet :

Réseau C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut Conversions big/little endian
    Bonjour à tous,

    Concernant les fontions suivantes (dans endian.h):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
           uint16_t htobe16(uint16_t host_16bits);
           uint16_t htole16(uint16_t host_16bits);
           uint16_t be16toh(uint16_t big_endian_16bits);
           uint16_t le16toh(uint16_t little_endian_16bits);
     
           uint32_t htobe32(uint32_t host_32bits);
           uint32_t htole32(uint32_t host_32bits);
           uint32_t be32toh(uint32_t big_endian_32bits);
           uint32_t le32toh(uint32_t little_endian_32bits);
     
           uint64_t htobe64(uint64_t host_64bits);
           uint64_t htole64(uint64_t host_64bits);
           uint64_t be64toh(uint64_t big_endian_64bits);
           uint64_t le64toh(uint64_t little_endian_64bits);
    fonctionnent elles avec des types signés?
    int64,int32,int16 par exemple.

    De plus, existe il pour GCC des macros de conversions little/big endian pour convertir des constantes pendant la compilation.

    Merci d'avance,

    D

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Certainement : #define be32toh_s(be32) (int32_t)be32toh((uint32_t)(be32)).

    Pour les macros, pas à ma connaissance mais il est possible de les écrire grâce à __BYTE_ORDER__ (click!).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut Et pour les float et les doubles?
    Toujours une question d'endianess, je ré ouvre la discution.

    Comment fait on pour les floats, doubles?

    Est on obligés d'utiliser l'union?
    Ya il des macros disponible?

    D

  4. #4
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Sur la plupart des architectures modernes, la configuration d'endianness pour les flottants est la même que pour les entiers. Ce n'est cependant pas une garantie. Quelles sont les architectures cibles de ton programme ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut
    Moi, j'aimerais que cela fonctionne pour la plupart des archis, mais en ce moment j'essaie sur un mix x86_64/powerpc64.

    Le power est un imac G5 avec un système 32bits linux.

    Le truc c'est que ce programme risque de se retrouver sur plein d'archis différentes a l'avenir.

    D

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut
    Au fait je ne l'ai pas dis mais c'est une application réseau client/serveur.

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Peut être vous trouverez une piste dans cet article : http://jeux.developpez.com/tutoriels...ule-flottante/ (je sais que ce n'est pas totalement le sujet, mais il y a des pistes de réflexion que j'estime réutilisable dans votre cas).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    ingenieur calcul haute performance
    Inscrit en
    Février 2013
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur calcul haute performance
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 51
    Points : 35
    Points
    35
    Par défaut
    Bon, je répond moi même a ma question, après examen, il semble qu'il ne faut surtout pas transmettre des types flottants sur le réseau car on a aucune garantie de l'endianess, mais en plus rien ne dis que le matériel (ou le compilateur) respecte la norme iee754 (qui standardise les calculs flottants).

    Apparemment il n'existe pas de couche d'abstraction matérielle permettant de régler ce problème.

    D

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conversion de little-endian à big-endian et inversement
    Par Le Farfadet Spatial dans le forum C++
    Réponses: 10
    Dernier message: 04/08/2011, 15h10
  2. Jouer avec big/little endian
    Par sopsag dans le forum Virtualisation
    Réponses: 1
    Dernier message: 26/05/2010, 15h24
  3. Conversion Big Endian vers Little Endian
    Par tupac25 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2010, 16h40
  4. Big endian et Little endian?
    Par moon93 dans le forum C
    Réponses: 4
    Dernier message: 07/05/2006, 22h48
  5. [6809] Documentation opcodes ? Big ou little endian ?
    Par krhamidou dans le forum Autres architectures
    Réponses: 2
    Dernier message: 21/01/2006, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo