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 de donn�es


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par d�faut Conversion de donn�es
    Bonjour,

    J'ai deux s�quences de 64 bits en hexa que j'ai cod� dans des variables de type unsigned long long int.

    En entr�e je r��ois des donn�es de type unsigned char que je voudrais convertir en unsigned long long int afin de comparer la valeur hexad�cimal que je re�ois en entr�e avec les deux s�quences fix�es pr�cedement.

    Comment convertir unsigned char en unsigned long long int?

    Merci en avance pour votre aide,

    Irene

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu veux dire des suites de unsigned char, ou juste un unsigned char � comparer (je ne sais pas comment) � des unsigned long long int ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par d�faut
    Au fait j'ai un flux de donn�es qui arrive (je code un block pour GNU Radio) au format unsigned char donc mon but �tait de convertir chaque unsigned char en unsigned long long int, puis d�caler les donn�es et venir y "concatener" chaque unsigned char converti.

    Le code en python ressemble � ceci (sauf que l� j'avais pas des questions � me poser concernant le type des donn�es) :


    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
     
    Frame_1 = 0x F3 FF 01 C6 A6 51 0F 95
    Frame_2 = 0x 33 AA 55 C6 65 9A 0C 59
     
    Sequence = 0
     
    for i in range(...):
       Byte = arrTxt[i]                              # arrTxt = données en entrée 
       for j in range (8):
          b0 = ((Byte >> (7-j)) & 0x1)
          Sequence ((Sequence << 1)+ b0) & 0xFFFFFFFFFFFFFFFF
          if (Sequence == Frame_1):
             # Frame 1 a été retrouvé
          if(Sequence == Frame_2):
             # Frame 2 a été retrouvé
    Je cherche � coder �a en c++.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par d�faut
    Une solution � laquelle j'ai pens� ce serait de r�cup�rer la valeur hexad�cimale des caract�res non sign�s et la stocker dans une variable de type unsigned long long int.

    Quel est l'�quivalent de la fonction python ord(char) en c++?
    Comment r�cup�rer la valeur hexad�cimale d'un caract�re?

  5. #5
    Membre �clair�
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    309
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 309
    Par d�faut
    La valeur hexa du caractere tu l'as deja. C'est avec elle que le programme manipule ton caractere.

    J'imagine que ton probleme c'est d'afficher ce caractere en hexa. C'est a dire, d'empecher le programme de te le traduire a l'aide de la table ASCII.

    Je te donne la fonction que j'utilise :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    string bin2str(uint8_t data)
    {
        ostringstream oss;
        oss << hex << (int) data;
        string str = oss.str();
        if(str.size() == 1) str = "0" + str;
        return str;
    }
    Avec un petit tour dans la FAQ tu devrais avoir une explication sur ce code. Sinon je repasserais.

  6. #6
    Membre �clair�
    Inscrit en
    Mai 2006
    Messages
    330
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par d�faut
    Le caract�re correspond � un nombre cod�e sur 8 bits entre 0 et 255, donc finalement il n'y a pas vraiment � "r�cup�rer" sa valeur hexad�cimale car c'est exactement la m�me chose que la valeur entre 0 et 255.

    L� tu veux apparemment comparer des suites de valeurs hexad�cimales pour savoir si tu trouves des motifs particuliers ce qui �quivaut � comparer des chaines de caract�res.

    Il y a plein de fa�ons diff�rentes de faire, si on suit ton id�e qui consiste � cr�er et comparer des nombres unsigned long long int, il faut utiliser les d�calages de bits :

    Si je ne me trompe pas :

    le nombre unsigned long long = (unsigned long long)1er caract�re << 56 + (unsigned long long)2eme caract�re << 48 + ... + (unsigned long long)7�me caract�re << 8 + (unsigned long long)8�me caract�re

    Sinon on peut aussi cr�er un tableau de char :

    char tab[9];
    tab[0] = 1er caract�re
    ...
    tab[7] = 8�me caract�re
    tab[8] = '\0'

    et utiliser les fonctions de comparaison de chaines de caract�re.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par d�faut
    J'ai vu ce code sur d'autres forums, mais j'ai lu que le fait d'utiliser ostringstream ralentit extr�mement (� confirmer vu que je m'y connais pas personnellement) et j'ai des fortes contraintes temps-r�el vu qu'il s'agit de traiter un flux.

    Par ailleurs les s�quences que je recherche sont constitu�es de 64 bits non sign�s donc je pense que le fait d'utiliser le type de variable 'string' n'est pas possible c'est pourquoi j'utilise des unsigned long long int. (Je suis ouverte � d'autres solutions si quequ'un a une autre id�e).

    Par contre les donn�es r��ues se trouvent au format 'unsigned char'. Je voulais r�cup�rer la valeur hexad�cimale en sorte � la stocker sous forme d'un unsigned long long int afin de pouvoir la comparer avec les s�quences de 64 bits dont je vous parlais.

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Je pense que le mieux est de faire comme en python : Un unsigned long long pour accumuler, des d�calages de bit et un OU logique.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par d�faut
    L� tu veux apparemment comparer des suites de valeurs hexad�cimales pour savoir si tu trouves des motifs particuliers ce qui �quivaut � comparer des chaines de caract�res.
    Tout � fait.

    Le caract�re correspond � un nombre cod�e sur 8 bits entre 0 et 255, donc finalement il n'y a pas vraiment � "r�cup�rer" sa valeur hexad�cimale car c'est exactement la m�me chose que la valeur entre 0 et 255.
    Je suis d'accord. Par contre (corrige-moi si je dis des betisses parce que c'est vraiment pas clair dans mon esprit), supposons un truc dans le genre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    unsigned long long int frame = 0x556F58AC...;
    unsigned char = "t";
    unsigned long long test = char;
     
    if (test == frame)
    ...
    Il y a quand m�me un probl�me de type de donn�es :

    unsigned long long test = char;

    J'aurai une erreur du genre 'ne peut pas convertir char en unsigned long long int' m�me si char = un entier entre 0 et 255.

  10. #10
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 759
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par d�faut
    Bonsoir,
    �crire plut�t cela:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    unsigned long long int frame = 0x556F58AC...;
    unsigned char ch = 't';
    unsigned long long test = 't' ;
     
    if (test == frame)
    ...
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    D�tails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par d�faut
    Je pense que le mieux est de faire comme en python : Un unsigned long long pour accumuler, des d�calages de bit et un OU logique.
    A ce moment l� je me pose toujours la m�me question :

    Les s�quences de 64 bits que je veux retrouver je les d�clare comme :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    unsigned long long int frame = 0x....;
    Par contre le flux en entr�e je le r�cup�re de la mani�re suivante :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    const unsigned char *in = (const unsigned char *) input_items[0];
    donc si je me trompes pas, chaque char r��u je le r�cup�re ainsi :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    for (i = 0; i < ...; i++)
    {
       unsigned char car = in[i];
    }
    En suite je passe par une variable interm�diaire "Sequence" comme dans le code en python o� j'accumule les donn�es r��ues en d�calant les bits. Pour pouvoir la comparer avec les s�quences recherch�es le format des donn�es doit �tre le m�me (unsigned long long int).

    Autrement dit, comment passer de car (unsigned char) � Sequence (unsigned long long int) afin de comparer � ce moment l� deux valeurs hexad�cimales?

  12. #12
    Membre �clair�
    Inscrit en
    Mai 2006
    Messages
    330
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par d�faut
    Citation Envoy� par Irene - 1 Voir le message
    Tout � fait.
    J'aurai une erreur du genre 'ne peut pas convertir char en unsigned long long int' m�me si char = un entier entre 0 et 255.
    Tout � fait c'est pour �a que j'ai ajout� des "casts" en unsigned long long des caract�res mat�rialis�s par "(unsigned long long)" devant chaque caract�re :

    cel� indique au compilateur d'interpr�ter la caract�re comme un unsigned long long :

    si tu as un char c qui vaut 0x5F (sur 8 bits)
    alors (unsigned long long)c vaut 0x000000000000005F
    et (unsigned long long)c << 56 vaut 0x5F00000000000000

    si tu as un autre char c2 qui vaut 0x4A
    alors (unsigned long long)c2 vaut 0x000000000000004A
    et (unsigned long long)c2 << 48 vaut 0x004A000000000000

    et la somme des deux (ou bien le "OU" logique |) fait 0x5F4A000000000000

    ainsi de suite tu construis ta s�quence de 64 bits ...

    mais sinon il y a encore plus simple par rapport au code que tu as post�. Si input_items[] est comme il se doit un tableau d'au moins 8 char alors tu as directement ton nombre en faisant :

    unsigned long long resultat = *((unsigned long long*)(&input_items[0]));

    &input_items[0] te donne l'adresse du premier des 8 octets
    (unsigned long long*) interpr�te cette adresse comme un pointeur d'un nombre sur 8 octets
    et enfin le * donne la valeur contenue � cette adresse.

  13. #13
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 759
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : Architecte technique retrait�
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 759
    Par d�faut
    Ca pourrait �tre qqc comme:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    sequence = 0;
    for (i = 0; i <  8 ; i++)
    {
        sequence <<= 8;     // je décale
        sequence += in[i];   // j'accumule.
    }
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Pourquoi, tout simplement, ne pas utiliser une union

    je ne sais pas, un truc du genre de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    union myUnion
    {
        unsigned char tabchar[8];
        unsigned long long my64;
    };
    Quand tu re�ois te unsigned char, tu les fais entrer, � la position qui leur correspond, par tabchar[i], et, quand tu veux r�obtenir ta valeur sous la forme d'un unsigned long long, tu la r�cup�re dans my64

    [EDIT]pour la pr�cision, cela donnerait quelque chose comme
    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
    int main()
    {
        myUnion mu;
        /* récupération des unsigned char */
        for(size_t i= 0 ; i<8; ++i)
        {
            unsigned char c;
            /* tu récupère ton unsigned char où tu veux ;) */
            mu[i]=c;
        }
        /* pour travailler avec ton unsigned long long */
        mu.my64 /* que faire de lui :P) */
     
        /*...*/
        return 0;
    }
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  15. #15
    Membre exp�riment�
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 190
    Par d�faut
    Citation Envoy� par koala01 Voir le message
    Salut,

    Pourquoi, tout simplement, ne pas utiliser une union

    je ne sais pas, un truc du genre de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    union myUnion
    {
        unsigned char tabchar[8];
        unsigned long long my64;
    };
    Quand tu re�ois te unsigned char, tu les fais entrer, � la position qui leur correspond, par tabchar[i], et, quand tu veux r�obtenir ta valeur sous la forme d'un unsigned long long, tu la r�cup�re dans my64

    [EDIT]pour la pr�cision, cela donnerait quelque chose comme
    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
    int main()
    {
        myUnion mu;
        /* récupération des unsigned char */
        for(size_t i= 0 ; i<8; ++i)
        {
            unsigned char c;
            /* tu récupère ton unsigned char où tu veux ;) */
            mu[i]=c;
        }
        /* pour travailler avec ton unsigned long long */
        mu.my64 /* que faire de lui :P) */
     
        /*...*/
        return 0;
    }
    Sauf que d'apr�s cette discussion (http://www.developpez.net/forums/sho...d.php?t=513797) la solution que tu proposes a un comportement ind�termin�.

  16. #16
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Attention, la solution n'a absolument pas un comportement ind�termin�, �tant donn� qu'il s'agit de travailler avec des entiers...

    Par contre, ce qui est possible (vraisemblable, risqu�), c'est que tu te trouve confront� � un probl�me de boutisme

    Autrement, c'est bel et bien le but et le r�le des unions que de permettre de faire correspondre une seule et m�me adresse m�moire � plusieurs types de donn�es diff�rents

    [EDIT]en fait, le probl�me de comportement ind�fini apparait si tu envisage l'union pour faire correspondre un certain nombre de char's qui ne sont pas *forc�ment* fournis dans le but de correspondre � un r�el avec une valeur interpr�t�e sous la forme de r�el (float ou double) du fait que l'on ne peut jamais s'assurer des positions et des tailles utilis�es pour les exposants et mantisses...

    Pour ce qu'il en est de la mise en concordance entre valeurs enti�res (de char vers int, long, long long), les seules inconnues qui peuvent valoir des surprises est le boutisme utilis� et l'ordre dans lequel les caract�res auront �t� envoy�s
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  17. #17
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Avec un probl�me de boutisme, le comportement n'est donc pas d�termin� par la norme.
    Mais normalement, il est d�termin� par la plate-forme, il n'est donc pas "ind�termin�".
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par M�dinoc Voir le message
    Avec un probl�me de boutisme, le comportement n'est donc pas d�termin� par la norme.
    Mais normalement, il est d�termin� par la plate-forme, il n'est donc pas "ind�termin�".
    En plus... ce qui tend � confirmer que la solution est viable s'il s'agit de travailler sur des entiers...

    Il n'est donc effectivement pas exclu que tu doive envisager une adaptation en vue de faire correspondre l'ordre dans lequel tu re�ois les variables au boutisme, mais cela reste du domaine du "facilement g�rable"
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  19. #19
    Membre exp�riment�
    Profil pro
    Inscrit en
    Ao�t 2007
    Messages
    190
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Ao�t 2007
    Messages : 190
    Par d�faut
    Vous avez sans doute raison mais alors pourquoi dans ce post (http://www.developpez.net/forums/sho...4&postcount=18) Jean-Marc Bourguet �voque un comportement ind�termin� ?

  20. #20
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par Montag Voir le message
    Vous avez sans doute raison mais alors pourquoi dans ce post (http://www.developpez.net/forums/sho...4&postcount=18) Jean-Marc Bourguet �voque un comportement ind�termin� ?
    Tu remarquera qu'il a �crit "je crois" que le comportement est ind�termin�...

    Cependant, tu as eu le dont de me faire me questionner sur les unions, et j'ai donc d�cid� de v�rifier ce qu'en dit la norme...

    En gros, elle interdit juste d'essayer de travailler sur plus d'un champs de l'union � la fois.

    Ainsi, tu ne pourrais pas envisager quelque chose comme
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    union MyUnion
    {
        char chartab[8];
        long long mylong;
    }
     
    void foo()
    {
        MyUnion u;
        u.chartab[1]=0xff,u.mylong=0xFAFAFAFAFAFA;
    }
    Pour le reste, il n'y a pas grand chose de nouveau:
    le chapitre 9.5 signale que:
    • la taille de l'union correspond � la taille du champs le plus long (et c'est pr�f�rable )
    • les diff�rents champs d'une union peuvent etre des POD
    • une union peut contenir des fonctions qui ne peuvent pas �tre virtuelles
    • une union ne peut pas servir de classe de base pour un h�ritage
    • une union ne peut contenir une classe (ou une structure) dont l'un des "big four" ne serait pas trivial
    • si une union contient un champs static, le programme est mal form�

    En dehors du chapitre 9.5 qui est particuli�rement r�serv� aux unions, on trouve des r�f�rences
    • au chapite 3.5 qui pr�cise qu'un nom ayant une port�e d'espace de noms subira une liaison des donn�es interne s'il s'agit d'un champs d'une union anonyme
    • au chapitre 3.9.10 qui indique que les types scalaires, les structurees-POD, les unions-POD et les tableaux sont appel�s de mani�re commune "types POD"
    • au chapitre 3.9.2 qui explique ce que sont les type compos�s
    • au chapitre 3.10 qui parle des rvalue et lvalue et qui en dit que,

      si un programme essaye d'acc�der � une valeur au travers d'une rvalue autrement que par
      • un type dynamique de l'objet
      • une version CV qualifi�e du type dynamique de l'objet
      • un type sign� ou non sign� correspondant au type dynamique de l'objet
      • un type sign� ou non sign� correspondant � la version CV qualifi� du type dynamique de l'objet
      • un agr�gat ou une union qui comprend un de ces types parmi ces membres
      • (...)

      il aura un comportement ind�fini
    • de ci de l� quand elle aborde le probl�me des r�f�rences, ou pour signaler que ce qu'elle appelle les "class objects" peuvent �tre des unons

    Autrement dit, un comportement proche de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    union myUnion
    {
        unsigned char tabchar[8];
        unsigned long long my64;
    };
    void foo()
    {
        myUnion myu;
        /*...*/
        unsigned long long monentierlong;
        monentierlong= myu.my64;
    }
    n'est absolument pas ind�fini
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

Discussions similaires

  1. Conversion de donn�e
    Par elfyx dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 12/02/2007, 08h48
  2. Conversion de donn�es
    Par noratec dans le forum Access
    R�ponses: 3
    Dernier message: 17/03/2006, 17h50
  3. Conversion de donn�es
    Par charliejo dans le forum C++Builder
    R�ponses: 3
    Dernier message: 31/01/2006, 09h59
  4. Pb de conversion de donn�es 16 vers 32
    Par Ducmonster dans le forum Langage
    R�ponses: 2
    Dernier message: 09/10/2005, 11h53
  5. [JSTL] [SQL] Conversion de donn�es
    Par GiHe dans le forum Taglibs
    R�ponses: 4
    Dernier message: 27/09/2005, 10h01

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