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

 C Discussion :

memcpy char* vers u_short


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut memcpy char* vers u_short
    Bonjour à tous.

    J'ai une simple question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    unsigned char paquet[2];
    paquet[0] = 0x00;
    paquet[1] = 0x10;
    u_short test;
    memcpy(&test, paquet, 2);
    printf("%d", test);
    OUTPUT : 4096

    Pourquoi est-ce que les char s'inversent quand on fait la copie ?


    Merci beaucoup.

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Les char ne s'inversent pas lors de la copie. C'est la représentation interne du u_short qui a le byte de poids faible en premier et le byte de poids fort en dernier sur ta machine (codage LittleEndian)

  3. #3
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Merci de votre réponse.

    Existe t'il d'autres implémentations d'un short que en 16 bits ? Ou faire ceci s'avère assez portable :


  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Faire ceci ne s'avère pas assez portable.

    Vu que tu parles de "paquet" je suppose que c'est du code réseau ? Dans ce cas la manière portable de transmettre des données et d'utiliser les fonctions htons() pour former les données à envoyer, et ntohs() pour former les données reçues.

    htons() se charge de transformer de manière portable un short tel qu'il est représenté sur ta machine ("h" pour "host") en une représentation "universelle" que tu peux transmettre sur un réseau ("n" pour "network"). ntohs() fait la transformation inverse.

  5. #5
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Merci mais ici ça n'a pas vraiment de rapport avec le réseau, comme l'a dit diogene, c'est la représentation interne du short. Enfin c'est vrai que je pourrai l'utiliser quand même, mais je trouvais que le nom portait à confusion. Et IMHO htons et ntohs font exactement la même chose Simplement parce que c'est impossible que htons se rende compte que les bytes sont déjà dans l'ordre du réseau.

    Merci quand même et bonne journée.

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

Discussions similaires

  1. Convertion char vers int
    Par barthelv dans le forum C
    Réponses: 8
    Dernier message: 08/10/2011, 21h45
  2. pb conversion unsigned char vers char *
    Par FamiDoo dans le forum C
    Réponses: 11
    Dernier message: 24/08/2006, 18h11
  3. Cast de char vers int
    Par Bernardtapis dans le forum C
    Réponses: 15
    Dernier message: 28/07/2006, 16h58
  4. [Clé de registre] Conversion char* vers unsigned char*
    Par The Lord of Nesquik dans le forum C
    Réponses: 7
    Dernier message: 03/07/2006, 23h30
  5. Conversion char * vers wchar_t
    Par Zapan dans le forum C++
    Réponses: 4
    Dernier message: 24/02/2005, 15h56

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