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 :

Comment récupérer les octets contenus dans un entier ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    raphdatcom
    Invité(e)
    Par défaut Comment récupérer les octets contenus dans un entier ?
    Bonjour,

    Je cherche à récupérer les octets contenus dans un entier ???

    int nombre = 11804;
    unsigned char tableauOctets[4];

    en sachant que 11804 vaut 0x2b4c en hexa

    je voudrais obtenir:

    tableauOctets[0] = 0x00
    tableauOctets[0] = 0x00
    tableauOctets[0] = 0x2b
    tableauOctets[0] = 0x4c

    Ca parait basique ...

    Merci de me donner un petit coup de main si vous savaez faire ça

  2. #2
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int nombre = 11804;
    unsigned char tableauOctets[4];
     
    tableauOctets[0] = (unsigned char) nombre;
    tableauOctet[1] = (unsigned char) (nombre << 8);
    tableauOctet[2] = (unsigned char) (nombre << 16);
    tableauOctet[3] = (unsigned char) (nombre << 24);
     
    printf("%x %x %x %x", tableauOctet[0], tableauOctet[1], tableauOctet[2], tableauOctet[3]);

  3. #3
    Invité de passage
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int nombre = 11804;
    unsigned char * tableauOctets = (unsigned char *)(&nombre);
     
    printf( "%02X %02X %02X %02X", tableauOctets[0], tableauOctets[1], tableauOctets[2], tableauOctets[3]);

  4. #4
    raphdatcom
    Invité(e)
    Par défaut
    cmoibal,

    ...ça ne marche pas !!! mais merci quand même


    quentind,

    ... ça marche !!! Merci bien

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention:
    1. Le code de cmoibal comporte une légère erreur (il faut utiliser l'opérateur >> au lieu de l'opérateur <<), mais est indépendant l'endianness de l'architecture: Son code affichera toujours l'octet de poids le plus faible en premier (little-endian).
    2. Le code de quentind, lui, est à déconseiller pour la raison opposée: Selon l'endianess de la machine, il affichera l'octet de poids le plus fort en premier (big-endian), ou le plus faible (little-endian).

    Et bien sûr, ces deux codes dépendent du fait qu'un int fasse quatre char et qu'un char fasse 8 bits.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    MERCI Médinoc pour la correction

    Et trés bonne explication ....

  7. #7
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Attention:
    [LIST=1][*]Le code de cmoibal comporte une légère erreur (il faut utiliser l'opérateur >> au lieu de l'opérateur <<), mais est indépendant l'endianness de l'architecture: Son code affichera toujours l'octet de poids le plus faible en premier (little-endian).
    Ajouter à cela qu'il utilise un int au lieu d'un unsigned, pour peu que le nombre soit négatif, le résultat du décalage à droite est implementation defined.
    De plus, indépendant de l'endianess? quid de l'endianess d'un PDP ? j'ai un doute!

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/01/2008, 14h30
  2. Comment récupérer les informations stockées dans l'imprimante ?
    Par PDelph7 dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 22/01/2008, 10h01
  3. Réponses: 4
    Dernier message: 03/07/2006, 01h30
  4. Récupérer les informations contenus dans un mail
    Par acado dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 17
    Dernier message: 10/04/2006, 14h48
  5. Comment récupérer les adresses WWW dans Internet Explorer ?
    Par chaours dans le forum Web & réseau
    Réponses: 7
    Dernier message: 03/09/2003, 14h27

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