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 :

Accéder un octet d'une structure


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 30
    Par défaut Accéder un octet d'une structure
    Bonjour,
    Je reçois des données octet par octet et je dois les mettre dans une structure de données.
    Il me semble qu'on pouvait accéder à un octet d'une structure, mais je me souviens plus trop comment.

    Si on convertit une structure en char, est-ce qu'on peut le traiter comme un tableau d'octets?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    bah une adresse est une adresse.. Tu peux toujours ajouter ce que tu veux (1 en particulier) à une adresse...

  3. #3
    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
    Citation Envoyé par bigcortex Voir le message
    Bonjour,
    Je reçois des données octet par octet et je dois les mettre dans une structure de données.
    Il me semble qu'on pouvait accéder à un octet d'une structure, mais je me souviens plus trop comment.

    Si on convertit une structure en char, est-ce qu'on peut le traiter comme un tableau d'octets?
    On peut mettre un tableau dans une structure (si on a besoin d'avoir une structure!)
    On ne peut pas convertir une structure en char ou en tableau de char. Eventuellement passer par une union ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 30
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    bah une adresse est une adresse.. Tu peux toujours ajouter ce que tu veux (1 en particulier) à une adresse...
    Mes notions de C sont un peu rouillées. On fait comment pour accéder à une adresse particulière de la structure?

    s[0] ?

    Citation Envoyé par diogene Voir le message
    On peut mettre un tableau dans une structure (si on a besoin d'avoir une structure!)
    On ne peut pas convertir une structure en char ou en tableau de char. Eventuellement passer par une union ?
    Je pense qu'on s'est mal compris. Ma structure comporte des données hétérogènes qui ne font pas nécessairement 1 octet (il y a des double, int, char, etc...)

    J'ai un module de communication qui m'envoie de l'information octet par octet. Je dois donc replacer cette information dans ma structure. Modifier la structure n'est pas une option car ça me demanderait de revoir mon code.

  5. #5
    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
    Citation Envoyé par bigcortex Voir le message
    Je pense qu'on s'est mal compris. Ma structure comporte des données hétérogènes qui ne font pas nécessairement 1 octet (il y a des double, int, char, etc...)

    J'ai un module de communication qui m'envoie de l'information octet par octet. Je dois donc replacer cette information dans ma structure. Modifier la structure n'est pas une option car ça me demanderait de revoir mon code.
    Effectivement, je n'avais rien compris et je n'ai toujours rien compris à ton problème ni pourquoi tu veux alors convertir ta structure en tableau de char

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 30
    Par défaut
    Citation Envoyé par diogene Voir le message
    Effectivement, je n'avais rien compris et je n'ai toujours rien compris à ton problème ni pourquoi tu veux alors convertir ta structure en tableau de char
    Ok, je vais essayer d'exposer le problème de façon plus claire.

    J'ai une structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct S{int var1; double var2; int var3; ... etc.};
    Cette structure doit contenir de l'information provenant d'un port en série. Ce port envoie des données octet par octet.

    Supposons que ma structure fasse 32 octets. J'aurais donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(i=0;i<32;i++)
    {
          data = lecture_port(); //data = 8 octets
     
         //Ici je dois placer data dans ma structure
    }

  7. #7
    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
    Il faut donc convertir la suite d'octets entrants en la valeur du bon type, int, double,... avant de l'écrire dans le bon champ de la structure

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 30
    Par défaut
    C'est une option mais je suis pas à l'aise avec cela car si on modifie la structure , il faudra revoir le module de communication.

    Si on pouvait accéder à une adresse d'une structure, il suffirait de parcourir la structure d'octet en octet et d'y placer la variable data.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     int i ;
     char *p ;
     p = (char *)&ma_struct ;
     
     for (i=0; i<32; i++)
       p[i]=lecture_port() ;
    Ce n'est pas portable...

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 30
    Par défaut
    Citation Envoyé par Zartan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     int i ;
     char *p ;
     p = (char *)&ma_struct ;
     
     for (i=0; i<32; i++)
       p[i]=lecture_port() ;
    Ce n'est pas portable...
    Je vais tester ça.
    Mais quand tu dis que c'est pas portable, est-ce que c'est parce que c'est pas de la programmation conventionnelle? Parce qu'il me semble que j'ai déjà fait ce genre de cast pour des communication par socket et par pipe.

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 133
    Par défaut
    Si on prend par exemple un word 0xFE54, certains processeurs le codent en mémoire 0xFE,0x54 et d'autres 0x54,0xFE.

    D'autre part la taille d'un int (et d'un double) varie d'un processeur à l'autre, d'un système d'exploitation à l'autre, d'un compilateur à l'autre, voire même sur le même compilateur en fonction des options de compilation choisies.

    C'est la raison pour laquelle avant de faire quelque chose comme cela il vaut mieux normaliser ses données, le plus simple étant de les convertir au format texte et de laisser le compilateur s'occuper du reste comme suggéré par diogene.

  12. #12
    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
    Citation Envoyé par bigcortex Voir le message
    C'est une option mais je suis pas à l'aise avec cela car si on modifie la structure , il faudra revoir le module de communication.

    Si on pouvait accéder à une adresse d'une structure, il suffirait de parcourir la structure d'octet en octet et d'y placer la variable data.
    Il ne s'agit pas de modifier la structure. Si tu sais où placer dans la structure ta variable data, tu sais qu'elle fait partie de var1 ou var2 ou var3...
    Rassemble les octets d'arrivée convenablement pour constituer un int ou un double selon le cas et place le résultat dans le champ qui lui convient.
    Ou alors, réalise une union avec ta structure et un tableau de char

Discussions similaires

  1. Accéder aux octets d'une variable de type Extended
    Par yupyupxav dans le forum Débuter
    Réponses: 5
    Dernier message: 17/12/2014, 10h17
  2. convertir une structure en une suite de doubles octets
    Par dedibox26 dans le forum Débuter
    Réponses: 6
    Dernier message: 29/04/2010, 23h11
  3. Réponses: 4
    Dernier message: 24/12/2009, 10h37
  4. accéder à une variable d'une structure
    Par acacia dans le forum Débuter
    Réponses: 10
    Dernier message: 20/02/2008, 18h14
  5. Réponses: 6
    Dernier message: 16/02/2006, 14h40

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