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 :

Concaténation des données d'un tableau [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 42
    Par défaut Concaténation des données d'un tableau
    Bonjour,

    voila la question que je me pose : j'ai un tableau d'entiers sur 16 bits contenant 2 éléments que j'ai déclaré comme ci dessous :

    T_Uint16 donnees[2];

    T_Uint16 étant bien entendu un type que j'ai défini auparavant.

    Je voulais savoir comment regrouper les 2 éléments du tableau en un entier de 32 bits? Afin de pouvoir manipuler l'entier de 32 bits.
    Dois-je faire une structure? ou une simple addition suffit-elle?

    par exemple : donnees[0]+donnees[1] ?

    Merci d'avance de votre aide, en esperant avoir été assez clair!

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par SybVicious
    Je voulais savoir comment regrouper les 2 éléments du tableau en un entier de 32 bits? Afin de pouvoir manipuler l'entier de 32 bits.
    Dois-je faire une structure? ou une simple addition suffit-elle?

    par exemple : donnees[0]+donnees[1] ?
    Salut !


    Ce que tu veux faire en fait, c'est une concaténation de deux entier c'est ca ? Si c'est le cas (en adméttant que tu dispose d'un type T_Uint32):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T_Uint32 resultat = 10 * donnees[0] + donnees[1];
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Tu peux faire une union
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    union{
    T_Uint32 _raw;
    T_Uint16 _tab[2];
    };
    Mais attention à l'endianess. Suivant si tu es sur une machine en little ou en big, _tab[0] sera le LSB ou le MSB respectivement !

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Bonjour,

    donnees[0] * pow (2, 16) +donnees[1]

    si donnees[0] représente les bits de poids fort par exemple
    et si tu te tiens à cette représentation des données (poids fort puis poids faible). A voir.

    Mais je me demande bien ce que tu veux faire avec ça.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par aoyou
    Mais je me demande bien ce que tu veux faire avec ça.
    En fait, il dispose de deux entiers 16bits et veux en faire un entier 32bits, un peut comme on à la séparation des données dans un registre processeur par exemple. Donc à mon avis ce qu'il veut faire c'est une concaténation des deux données.

    Exemple: Si tu as donnees[0] = 5 et donnees[1] = 9, le but est de fait un entier 32bits qui vaut 59
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Alors, dans ce cas, multiplier par 10 donnees[0] ne résoud pas le problème.
    Si donnees [1] vaut 99, je n'aurais pas 599 mais 149.

    Attendons que SybVicious nous donne un exemple de ce qu'il veut faire car au vue de la multiplicité des réponses, il y a plusieurs interprétations possibles.

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par aoyou
    Alors, dans ce cas, multiplier par 10 donnees[0] ne résoud pas le problème.
    Si donnees [1] vaut 99, je n'aurais pas 599 mais 149.
    Oui c'est vrai que j'ai donné un exemple très simpliste mais j'avais oublié de préciser que si donnee[0] par exemple possède une valeur supérieure ou égale à 10, tu multiplies alors par 100 et non pas 10 et ainsi de suite

    Maintenant s'il y a plus élégant... ma méthode n'est peut-être pas la plus pratique suivant les cas
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre averti
    Inscrit en
    Août 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 42
    Par défaut
    Bonjour,
    deja merci a tous de votre aide!
    je vais essayer detre plus précis:
    en fait je recupere des données (en l'occurence un compteur) qui est sur 32 bits. Seulement, les données que je récupère sont, comme vous l'avez compris séparés en 2 éléments de tableau de 16 bits. Imaginons que mes donnees soient les suivantes :

    donnees[0]=0000 0101 1000 0100
    donnees[1]=0100 1100 0000 1000

    j'aimerais récuperer un entier sur 32 bits et pouvoir le manipuler dont la valeur est la suivante:

    T_Uint32 = 0000 0101 1000 0100 0100 1100 0000 1000

    je pense que l'union est la bonne solution? ou la reponse de aoyou me semble appropriée également
    qu'en pensez vous ?
    Merci!!!

  9. #9
    scr
    scr est déconnecté
    Membre éprouvé
    Inscrit en
    Juin 2005
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 127
    Par défaut
    Tu peux directement calculer la somme dans un entier 32 bits.

    Par contre il faut utiliser un cast pour que la somme soit calculée sur 32 bits

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DWORD x;
    x=((DWORD)donnees[0])+donnees[1];

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/05/2009, 09h38
  2. [MySQL] Formatage des données dans un tableau
    Par dunbar dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/06/2006, 08h52
  3. Réponses: 4
    Dernier message: 17/04/2006, 20h10
  4. [MySQL] Stocker des données dans un tableau
    Par LadyArwen dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/02/2006, 10h40
  5. Réponses: 3
    Dernier message: 05/12/2005, 02h30

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