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 :

Manipuler correctement un tableau de us casté


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 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Par défaut Manipuler correctement un tableau de us casté
    Bonjour,
    J'ai une fonction read qui prend comme paramètre buffer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int read (void * buffer[]);
    Dans celle-ci, un appel de read_words a lieu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read_words((unsigned short*)buffer, adresse)
    Dans celle-ci, j'ai une copie qui s'effectue à partir d'une adresse et mon espace mémoire à partir de l'adresse de buffer devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    00430BC4  CDCD  CDCD  CDCD  CDCD  CDCD  CDCD  CDCD  
    00430BD2  CDCD  CDCD  CDCD  CDCD  CDCD  CDCD  CDCD  
    00430BE0  CDCD  CDCD  CDCD  CDCD  CDCD  CDCD  CDCD
    Ce qui est ok (21 mots de 2 octets)
    Dans read, j'affiche le buffer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(i = 0;i<nbWord;i++) //nbWord = 21 pour nombre de mots (2 octets/mot)
    printf("0x%04X\t",(unsigned short)buffer[i]);
    L'affichage n'est pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0xCDCD  0xCDCD  0xCDCD  0xCDCD  0xCDCD  0xCDCD  0xCDCD  0xCDCD
    0xCDCD  0xCDCD  0xCDCD  0x0000  0x0000  0x0000  0x0000  0x0000
    0x0000  0x0000  0x0000  0x0000  0x0000
    En fait, j'ai l'impression que l'on ne voit que la moitié de chaque mot long (4 octets) et donc seulement 11 mots.
    Comment afficher correctement les 21 mots ?
    Merci

    EDIT : peut-être ne peut-on pas accéder à 1 ou 2 octets de la mémoire ? L'accès se fait-il seulement par paquet de 4 ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    cdcdcdcd, c'est des valeurs correctes, des valeurs que tu attends ?

    J'ai l'impression de voir des pointeurs non initialisés avec ces valeurs.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par wilval Voir le message
    Dans read, j'affiche le buffer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(i = 0;i<nbWord;i++) //nbWord = 21 pour nombre de mots (2 octets/mot)
    printf("0x%04X\t",(unsigned short)buffer[i]);

    Si j'ai bien suivi, buffer est un void* donc buffer[i] ne devrait même pas compiler.

    Certains compilateurs proposent des extensions sur l'arithmétique des void*, mais d'une part ce n'est pas portable et ça ne fait pas nécessairement ce que tu souhaites.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 33
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    cdcdcdcd, c'est des valeurs correctes, des valeurs que tu attends ?

    J'ai l'impression de voir des pointeurs non initialisés avec ces valeurs.
    Oui mais qu'importe les valeurs pour l'instant. Ce n'est pas le problème de base.

    Citation Envoyé par gl Voir le message
    Si j'ai bien suivi, buffer est un void* donc buffer[i] ne devrait même pas compiler.
    En effet, je sentais bien que ça collait pas.

    Bon, alors j'ai modifié pas mal de trucs pour éviter ce void *. Pour info, je mets les changements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int read (u_buffer * buffer);
    avec u_buffer un typedef d'union sur tableaux (dont 1 tabword de WORD).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    read_words(unsigned short *)buffer->tabword)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(i = 0;i<nbWord;i++) //nbWord = 21 pour nombre de mots (2 octets/mot)
    printf("0x%04X\t",buffer->tabword[i]);
    ça marche mieux même si tout n'est pas parfait.
    merci

Discussions similaires

  1. [XL-2002] Manipuler une variable tableau
    Par Troudz dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/02/2011, 18h09
  2. manipuler devise dans tableau
    Par lovedesitaliens dans le forum C#
    Réponses: 7
    Dernier message: 28/08/2010, 17h58
  3. Manipulation d'un tableau de pointeurs
    Par Stalko dans le forum Débuter
    Réponses: 4
    Dernier message: 06/09/2009, 12h42
  4. manipulation d'un tableau d'une structure de donnee
    Par questionvb dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/03/2007, 14h02
  5. Manipulation d'un tableau sous Word avec vba
    Par Françoise Sagan dans le forum VBA Word
    Réponses: 1
    Dernier message: 02/12/2006, 13h54

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