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 :

Initialiser un bloc dans une structure


Sujet :

C

  1. #1
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut Initialiser un bloc dans une structure
    Bonjour,

    j'ai une structure de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct {
      char data1[2];
      char data2[10];
      int data3;
    ....
    }stData;
    stData *pData;
    Je dois initialiser certains champs. Pas de souci pour les chaîne de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    memcpy(pData->data1, "1", 1);
    // là je veux initialiser du binaire
    //comment faire pour remplacer ceci qui ne marche pas
    pData->data2 = {0xa0, 0, 0, 0, 0x42, 0x10, 0x10, 0x10, 0x10};
    Suis-je obligé de passer par un tableau intermédiaire ? (ça va être lourd)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char tmp[10] = {0xa0, 0, 0, 0, 0x42, 0x10, 0x10, 0x10, 0x10};
    memcpy(pData->data2, tmp, 9);
    Une solution C++ est possible.

    Merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 049
    Points
    33 049
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    je viens de tester, avec une macro variadic
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define INITCHAMP(champ, size, ...) \
       { char tmp[size+1] = {__VA_ARGS__}; memcpy(champ, tmp, size); }
    qui permet l'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INITCHAMP(pData->data2, 9, 0xa0, 0, 0, 0, 0x42, 0x10, 0x10, 0x10, 0x10)
    Ca fonctionne.
    Les accolades dans la macro permettent d'éviter les erreurs de redefined tmp.

    J'aurais préféré une écriture comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INITCHAMP(pData->data2, 9, {0xa0, 0, 0, 0, 0x42, 0x10, 0x10, 0x10, 0x10}, 9)
    avec la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define INITCHAMP(champ, contenu, size) \
       { char tmp[size+1] = contenu; memcpy(champ, tmp, size); }
    Mais j'ai un warning C4002 :/

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    Merci.

    C'est vrai que c'est un peu galère, je vais partir sur ton idée.

    je fermerai la discussion si personne d'autre n'a idée d'ici ce soir

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/02/2007, 15h46
  2. Réponses: 7
    Dernier message: 21/12/2005, 16h44
  3. Enlver un noeud dans une structure XML
    Par Sharingan dans le forum ASP
    Réponses: 4
    Dernier message: 20/12/2004, 08h08
  4. donée de plusieur vecteur dans une structure ??
    Par lipczynski dans le forum C++
    Réponses: 5
    Dernier message: 13/08/2004, 08h17
  5. type void* dans une structure
    Par barbapapaz dans le forum C
    Réponses: 3
    Dernier message: 16/07/2004, 16h11

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