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 :

Convertir int en 16bits


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 71
    Par défaut Convertir int en 16bits
    Bonjour,

    Je voudrais savoir s'il y a un moyen simple de convertir un int en un nombre de 16bits en C++...

    Merci d'avance !

  2. #2
    Membre chevronné
    Profil pro
    Consultant en technologies
    Inscrit en
    Octobre 2013
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Octobre 2013
    Messages : 158
    Par défaut
    Même si les types de bases ont une taille connue, celle-ci peut dépendre de la plateforme, donc il y a aussi des entier avec une taille connue, genre uint16_t pour un entier non signé 16 bits (Je met pas ma main au feu que ce soit standard)
    D'après google ca se trouve dans le header cstdint

    Il te suffit alors de caster vers ces types (Attention aux over/under flow)

  3. #3
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par _zzyx_ Voir le message
    il y a aussi des entier avec une taille connue, genre uint16_t pour un entier non signé 16 bits (Je met pas ma main au feu que ce soit standard)
    int16_t, uint16_t et plus largement [u]intXX_t sont optionnels. [u]intXX_t doit exister uniquement si un type avec cette caractéristique existe sur la machine.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 71
    Par défaut
    Merci pour vos réponses !

  5. #5
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    Si tu veux coder en entier sur 16bits (ou n'importe qu'elle autre encodage), tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct int_16
    {
        int a : 16;
    };

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par Danny-k Voir le message
    Si tu veux coder en entier sur 16bits (ou n'importe qu'elle autre encodage), tu peux faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct int_16
    {
        int a : 16;
    };
    Avec int, ça marchera uniquement jusqu'à 16 bits, pas plus (donc pas « n'importe qu'elle autre encodage »).
    Avec long int, ça marchera jusqu'à 32 bits.
    Avec long long int, ça marchera jusqu'à 64 bits.
    Car ce sont les tailles minimales données par la norme C++.

  7. #7
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Avec int, ça marchera uniquement jusqu'à 16 bits, pas plus (donc pas « n'importe qu'elle autre encodage »).
    Avec long int, ça marchera jusqu'à 32 bits.
    Avec long long int, ça marchera jusqu'à 64 bits.
    Car ce sont les tailles minimales données par la norme C++.
    Étonnant de ne pas pouvoir définir un int sur 17 bits car en moyenne (architecture 32-64 bits), un int c'est 4 octets soit 32 bits (plutôt défini comme une plage, mais c'est pour faire court), qu'on ne puisse pas définir un int sur 64 bits me semblerait logique mais pour toutes valeurs inférieurs à 32, cela me semble étonnant, sinon je n'ai pas trouvé d'articles la-dessus dans le standard, aurait-tu un lien ?

  8. #8
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par Danny-k Voir le message
    Étonnant de ne pas pouvoir définir un int sur 17 bits car en moyenne (architecture 32-64 bits), un int c'est 4 octets soit 32 bits (plutôt défini comme une plage, mais c'est pour faire court), qu'on ne puisse pas définir un int sur 64 bits me semblerait logique mais pour toutes valeurs inférieurs à 32, cela me semble étonnant, sinon je n'ai pas trouvé d'articles la-dessus dans le standard, aurait-tu un lien ?
    La Norme C, 5.2.4.2.1 Sizes of integer types <limits.h> (page 27) :
    Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
    - minimum value for an object of type int
    INT_MIN -32767 // -(2^15-1)
    - maximum value for an object of type int
    INT_MAX +32767 // 2^15-1

  9. #9
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    Ok merci du lien, cependant un doute persiste encore, comment se fait-il qu'un int soit défini comme étant égal à 2^15 - 1, c'est-à-dire comme un short codé sur 2 octets plutôt que 4.
    De plus si on on regarde ici :
    http://www.cplusplus.com/reference/l...umeric_limits/

    Dans l'exemple on a ceci :
    Maximum value for int: 2147483647
    Soit 2^31 - 1

    Problème sur le site cplusplus.com ?

  10. #10
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par Danny-k Voir le message
    Ok merci du lien, cependant un doute persiste encore, comment se fait-il qu'un int soit défini comme étant égal à 2^15 - 1, c'est-à-dire comme un short codé sur 2 octets plutôt que 4.
    De plus si on on regarde ici :
    http://www.cplusplus.com/reference/l...umeric_limits/

    Dans l'exemple on a ceci :


    Soit 2^31 - 1

    Problème sur le site cplusplus.com ?
    C'est un exemple sur une architecture, un système d'exploitation et avec un compilateur.
    (Et cet exemple respecte la norme.)
    16 bits est une valeur minimale, pas une obligatoire.

  11. #11
    Membre éprouvé
    Inscrit en
    Mai 2012
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mai 2012
    Messages : 65
    Par défaut
    Ok, bon à savoir.
    Donc on est d'accord, sur le fait qu'on puisse écrire un int sur 17 bits, sur une architecture 32/64 bits indiquant qu'un int a une taille de 4 octets ?
    En tout cas sous Visual et GCC c'est le cas, et il me sort un warning si je mets une valeur supérieur à la taille d'un int codé sur 32 bits.

  12. #12
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par Danny-k Voir le message
    Donc on est d'accord, sur le fait qu'on puisse écrire un int sur 17 bits, sur une architecture 32/64 bits indiquant qu'un int a une taille de 4 octets ?.
    La norme ne te le garantit pas
    Tu peux le faire avec un static_assert(sizeof(int) * CHAR_BIT >= 17); mais ton code ne sera pas portable... sur des vielles architectures ou de l'embarqué (en pratique).

Discussions similaires

  1. convertir int (32bits) en char(8bit)
    Par madjidri dans le forum C++
    Réponses: 2
    Dernier message: 28/05/2007, 18h50
  2. [FAQ] Convertir int to String
    Par mamid1706 dans le forum C++
    Réponses: 2
    Dernier message: 09/05/2007, 15h20
  3. convertir int en Object et int en char
    Par djanos dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2007, 18h58
  4. Convertir int en chaîne de caractère
    Par be_tnt dans le forum Réseau
    Réponses: 44
    Dernier message: 25/04/2006, 15h35
  5. [Conversion]convertir int[] en bytes[]
    Par tony_big_guy dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2005, 15h47

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