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 :

Conversion d'un int en octets


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Par défaut Conversion d'un int en octets
    Bonjour à tous, je voudrais effectuer une conversion d'une variable de type int en octets. Pour celaj'ai défini le type suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef unsigned char byte;
    Je définis ensuite la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    byte * toBytes() {
      byte * tab; 
      tab = (byte *) malloc (sizeof(2 * sizeof(int) + TAILLEBUF * sizeof(char)));
      int val = _codeOperation;
      int i;
      for (i = 0; i < 4; i ++) {
        tab[i] = (byte) (val & 000000FF);
        val = val >> 8;
      }
      for (i = 0; i < TAILLEBUF; i ++) {
        tab[i + 4] = _msg[i];
      }
      val = _valeur;
      for (i = 0; i < 4; i ++) {
        tab[i + 4 + TAILLEBUF] = (byte) (val & 000000FF);
        val = val >> 8;
      }
      return tab;
    }
    Problème à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    spulvera@scinfe129 ~/Desktop/projet/C
    $ gcc -c MessageConsole.c
    MessageConsole.c:33:28: erreur: suffixe « FF » invalide pour une constante entière
    MessageConsole.c:41:44: erreur: suffixe « FF » invalide pour une constante entière
    Est-ce que quelqu'un pourrait m'aider svp??
    Merci d'avance.

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab[i] = (byte) (val & 0xFF);
    ps : inutile de caster le retour de malloc en C.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 38
    Par défaut
    merci beaucoup

  4. #4
    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
    Je vois que tu mélanges intructions et déclarations, j'en déduits donc que tu compiles en mode C99, dans ce cas je te propose de remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef unsigned char byte;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <stdint.h>
    /* et la tu disposes du type uint8_t */

  5. #5
    Membre chevronné Avatar de dapounet
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 469
    Par défaut
    J'ai peut-être mal compris ce que tu veux faire mais pour convertir un int en bytes j'utiliserais simplement quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int i;
    unsigned char bytes[sizeof(int)];
     
    memcpy (bytes, &i, sizeof(int));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    union
    {
       int i;
       unsigned char bytes[sizeof(int)];
    } u;
    Méfie-toi de l'endianness des données.

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

Discussions similaires

  1. Conversion comboBox en int
    Par Beuuun dans le forum MFC
    Réponses: 2
    Dernier message: 09/03/2006, 13h59
  2. probleme de conversion float en int
    Par murreya dans le forum C++
    Réponses: 2
    Dernier message: 17/12/2005, 15h27
  3. Conversion float vers int
    Par vargasvan dans le forum C
    Réponses: 2
    Dernier message: 05/10/2005, 17h29
  4. Conversion VARCHAR vers INT
    Par Slash dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/05/2005, 10h43
  5. [FLASH MX 2004] conversion string en int.
    Par calfater dans le forum Flash
    Réponses: 3
    Dernier message: 26/05/2004, 15h00

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