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 :

type portable


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Février 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 22
    Par défaut type portable
    bonjour

    je fais une appli qui doit être portable windows/linux/mac, et il me faudrait un type de 8 bits. je sais qu'il y a le type uint8_t, mais il n'a pas l'air d'apparaître sous visual c++.

    qqun aurait-il une idée ? le type char fait-il toujours 8 bits ?

    merci d'avance

  2. #2
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Par définition, un char fait pile 1 byte. Sur une machine "standard" (de type x86), ça fait bien 8 bits. Apparemment il y a des machines ou ce n'est pas le cas (il y a forcément un hic )

    Regarde ce post là pour plus d'infos : http://www.developpez.net/forums/viewtopic.php?t=214105

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par défaut
    Un char fait toujours au moins 8bits.

  4. #4
    Membre averti
    Inscrit en
    Février 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 22
    Par défaut
    ok merci
    je pense que je vais opter pour le char

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Un char fait toujours au moins 8bits.
    C'est faux.
    Un char fait toujours exactement 1 byte, ce qui peut être une valeur totalement arbitraire de bits.

    je sais qu'il y a le type uint8_t, mais il n'a pas l'air d'apparaître sous visual c++.
    Voir <stdint.h>, C99.

  6. #6
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Par définition, un char fait pile 1 byte. Sur une machine "standard" (de type x86), ça fait bien 8 bits
    A moins qu'il travaille sur une architecture "étrange" (DSP 56156 par exemple), il peut peut-être assumer que c'est le cas ?

    edit: ooops au temps pour moi, ça doit tourner sur Mac aussi (bien qu'ils commencent la production de Mac x86 ). Est-ce que quelqu'un pourrait confirmer qu'un "char" fait toujours 8 bits sur PowerPC ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    edit: ooops au temps pour moi, ça doit tourner sur Mac aussi (bien qu'ils commencent la production de Mac x86 Wink). Est-ce que quelqu'un pourrait confirmer qu'un "char" fait toujours 8 bits sur PowerPC ?
    Oui, bien sûr.
    Il n'y a guère que les DSP, de nos jours, qui utilisent des bytes qui ne font pas 8 bits.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par défaut
    loufoque > la norme garenti que un char fait 1 byte et au moins 8 bits.

    il peut donc faire 8,9,12,16,32 bits mais toujours au moins 8...

  9. #9
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Il y a aussi les unsigned char qui sont codées sur un octet, donc en principe, ça fait 8 bits...

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    unsigned char a la même taille qu'un char, c'est évident.
    Ta remarque n'a pas grand intérêt.

    Citation Envoyé par Gandalf
    la norme garenti que un char fait 1 byte et au moins 8 bits.
    Je viens de télécharger le brouillon de la prochaine norme C (je croyais alors qu'on était dans le forum C, je me suis planté, enfin ça change rien) et je ne vois rien de tel.
    Citation Envoyé par wg14 n1124
    A byte is composed of a contiguous sequence of bits, the number of which is implementation defined.
    Pas de restriction sur la taille d'un byte donc...

    Edit: Apparemment, une autre close (5.2.4.2.1) indique qu'effectivement, un byte doit faire au minimum 8 bits en C.
    Donc en fait un byte en C/C++ peut être plusieurs bytes au sens hardware du terme, dans certains cas.

  11. #11
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Ta remarque n'a pas grand intérêt.
    Je me trompe peut-être, mais aymeric__ souhaite peut être utiliser une plage de valeurs positives allant jusqu'à 255...

  12. #12
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Et en "trichant" avec un champs de bits ?
    Tu dis que ton char prend 8 bits, ca devrait être bon?
    Tu le mets unsigned si tu veux qu'il aille de 0 à 255, et ça ira je pense.

  13. #13
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    C'est exactement ce à quoi je pensais

  14. #14
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Il me semble que le bool est codé sur un bit également...

  15. #15
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    <mode="Tetracapillosectomie">
    Citation Envoyé par loufoque
    Je viens de télécharger le brouillon de la prochaine norme C (je croyais alors qu'on était dans le forum C, je me suis planté, enfin ça change rien) et je ne vois rien de tel.
    Citation Envoyé par wg14 n1124
    A byte is composed of a contiguous sequence of bits, the number of which is implementation defined.
    Pas de restriction sur la taille d'un byte donc...
    Je n'ai pas la norme C, juste la norme C++. On y trouve la définition suivante :

    Citation Envoyé par La norme C++
    Objects declared as characters (char) shall be large enough to store any member of the implementation’s basic character set. If a character from this set is stored in a character object, the integral value of that character object is equal to the value of the single character literal form of that character. It is implementation defined whether a char object can hold negative values. Characters can be explicitly declared unsigned or signed. Plain char, signed char, and unsigned char are three distinct types. A char, a signed char, and an unsigned char occupy the same amount of storage and have the same alignment requirements (3.9); that is, they have the same object representation. For character types, all bits of the object representation participate in the value representation. For unsigned character types, all possible bit patterns of the value representation represent numbers. These requirements do not hold for other types. In any particular implementation, a plain char object can take on either the same values as a signed char or an unsigned char; which one is implementationdefined.
    Quand on sait que le basic character set contient au moins 96 caractères (ou 100, je ne sais pas s'il faut considérer le basic source character set, ou le basic execution character set), ça impose 7 bits au minimum.

    De plus, on lit :
    Citation Envoyé par Le standard C++
    For each basic execution character set, the values of the members shall be nonnegative and distinct from one another.
    Je je comprends bien mon standardese, ça signifie que dans le cas où char est signé de manière égalitaire entre positifs et négatifs, il faut au moins 96*2 caractères => 8 bits.

    Dans le même ordre d'idées, on sait(1) que int doit pouvoir contenir au moins les valeurs allant de INT_MIN à INT_MAX, mais ces valeurs ne sont pas définies dans la norme C++, qui fait là référence à la norme C que je n'ai pas. Je me suis laissé dire que ça impliquait un codage sur au moins 16 bits pour un entier.

    </mode>

    (1) dans une note, qui est sensée être non normative...
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  16. #16
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par reggae
    Il me semble que le bool est codé sur un bit également...
    Ce n'est pas possible. La taille d'un type quelconque est multiple de celle d'un char, qui a besoin de plus d'un bit.

    Souvent, un booléen est géré sur un int (et donc, plus qu'un char), qui représent le type que l'architecture gère le plus naturellement.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  17. #17
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut Re: type portable
    Citation Envoyé par aymeric__
    bonjour

    je fais une appli qui doit être portable windows/linux/mac, et il me faudrait un type de 8 bits. je sais qu'il y a le type uint8_t, mais il n'a pas l'air d'apparaître sous visual c++.

    qqun aurait-il une idée ? le type char fait-il toujours 8 bits ?
    Sur les architectures citées, oui. Par contre, selon l'architecture, le char peut être signé ou non signé. Si tu veux faire des manipulations de bits, je te conseille d'utiliser plutôt des unsigned char.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  18. #18
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Pour les bool, j'ai entendu dire que cela dépendait du compilo...
    Je suis allé voir sous MSDN:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/basic_43.asp
    J'y ai trouvé ceci:
    In Visual C++4.2, the Standard C++ header files contained a typedef that equated bool with int. In Visual C++ 5.0 and later, bool is implemented as a built-in type with a size of 1 byte. That means that for Visual C++ 4.2, a call of sizeof(bool) yields 4, while in Visual C++ 5.0 and later, the same call yields 1.

  19. #19
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par reggae
    Pour les bool, j'ai entendu dire que cela dépendait du compilo...
    Comme tous les types... Mais en tout cas, ce n'est jamais 1 bit.


    Citation Envoyé par reggae
    Je suis allé voir sous MSDN:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/basic_43.asp
    J'y ai trouvé ceci:
    In Visual C++4.2, the Standard C++ header files contained a typedef that equated bool with int. In Visual C++ 5.0 and later, bool is implemented as a built-in type with a size of 1 byte. That means that for Visual C++ 4.2, a call of sizeof(bool) yields 4, while in Visual C++ 5.0 and later, the same call yields 1.
    Attention : 1 byte = 1 multiplet (souvent = 1 octet = 8bits)
    1 bit = 1bit
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  20. #20
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    bool is implemented as a built-in type with a size of 1 byte.
    Donc si on suit ce que tu viens de me dire:
    1 byte = 1 multiplet (souvent = 1 octet = 8bits)
    on a des chances que ça fasse 8 bits non?

Discussions similaires

  1. [Débutant] Créer une application portable de type "WindowsApplication"
    Par carjo dans le forum VB.NET
    Réponses: 8
    Dernier message: 27/08/2014, 15h00
  2. Application portable type "bande annonce", quel langage utiliser ?
    Par boubou_s dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 12/12/2006, 15h23
  3. Types portables
    Par Higestromm dans le forum C++
    Réponses: 6
    Dernier message: 28/10/2004, 13h48
  4. Application Portable sur differents types de BDD
    Par sylvain_2020 dans le forum Décisions SGBD
    Réponses: 11
    Dernier message: 23/09/2003, 12h59
  5. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

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