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 :

Qu'est-ce qu'un Uint8/32


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2021
    Messages : 52
    Points : 41
    Points
    41
    Par défaut Qu'est-ce qu'un Uint8/32
    Bonjour;
    Quelle est la différence entre un int et un Uint8 ou Uint32 ?
    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Points : 1 376
    Points
    1 376
    Par défaut
    Bonjour,

    En C, un int est un entier signé dont la taille dépend de la plateforme et de l'implémentation du compilateur et de la libc. En général un int fait 4 octets ou 32 bits. La représentation utilisée dépend également de la plateforme et du compilo, mais en général on utilise un complément à 2. L'endianess varie également suivant la plateforme.

    Comme la représentation d'un int peut énormément varier alors que parfois on a besoin d'avoir un entier parfaitement défini, la stratégie de l'int qui peut varier de plateforme à plateforme mais qui est en général le mieux adapté à la plateforme cible peut causer des soucis de portabilité ou de transfert de données. Pour palier ce problème, la norme C99 propose la possibilité à une implémentation de C de fournir des types particuliers qui ont une certaine taille.
    Donc en C99 et suivant (C11, C18 et futur C23) sont proposés les entiers à taille fixe. Mais la SDL les propose aussi sous un autre nom. UInt8 est donc un entier non signé codé sur 8 bits (U pour unsigned, int pour integer, 8 pour la taille en bit). Je te laisse deviner ce qu'est un UInt32 …

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2021
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Ok, merci.
    et j'ai aussi vu des Uint8_t. C'est pareil ?

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Oui c’est pareil. Si tu es sous Linux essayes un «man uint8_t» tu auras toutes les explications à tes questionnements de type. Sinon tape la même chose dans ton moteur de recherche préféré.

    Pour être bien sûr que l’on parle de la même chose uint8_t ou Uint8 ou autres ressemblant à ces derniers ne sont que des types définis. C’est à dire utilisant le mot réservé typedef. Ici ce n’est qu’un unsigned char.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    À sa décharge, ces types sont des types de base (donc en théorie portable) dans l'entête C stdint.h (ou depuis le C+11 dans l'entête C++ cstdint)

    header <cstdint> (stdint.h), lien en anglais


    Édit : @Sve@r a raison. Lorsque je dis "de base", c'est parce que ces types viennent avec la librairie standard. Mais effectivement ces types ne sont pas des types par défaut.
    Et c'est pour cela que je dis "À sa décharge" parce qu'il faut savoir que ces types sont dans la librairie standard est utilisable avec 1 include.

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par WhiteCrow Voir le message
    Comme la représentation d'un int peut énormément varier alors que parfois on a besoin d'avoir un entier parfaitement défini...Donc en C99 et suivant (C11, C18 et futur C23) sont proposés les entiers à taille fixe.
    Le souci c'est que si (par exemple) le Uint16 est défini à partir d'un unsigned short, alors comme la norme précise qu'un unsigned short fait au moins 16 bits, rien ne lui interdit d'en faire 24 ou 32. Donc pas de taille fixe là dedans. Et si ces types ne sont pas créés artificiellement mais inclus nativement dans le langage (C99, C11) alors ils devraient être connus de mon compilateur (gcc v8 sous Debian10) or il ne les connait pas)...

    Citation Envoyé par foetus Voir le message
    À sa décharge, ces types sont des types de base
    Ben non, un type "de base" c'est un type connu du compilateur sans besoin d'adjonction ou de déguisement. A mon sens il n'y a que char, int, short, long, float ou double comme types de base (peut-être aussi long long et long double depuis sais plus quelle évolution). Mais si tu dois rajouter un header dans lequel le type est artificiellement créé à partir d'un de ces types qui eux sont vraiment de base (ex typedef unsigned short Uint16_t) alors ce Uint16_t n'est pas un type "de base"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre expérimenté
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Points : 1 376
    Points
    1 376
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Le souci c'est que si (par exemple) le Uint16 est défini à partir d'un unsigned short, alors comme la norme précise qu'un unsigned short fait au moins 16 bits, rien ne lui interdit d'en faire 24 ou 32. Donc pas de taille fixe là dedans. Et si ces types ne sont pas créés artificiellement mais inclus nativement dans le langage (C99, C11) alors ils devraient être connus de mon compilateur (gcc v8 sous Debian10) or il ne les connait pas)...

    Uint16 ou équivalent est défini par SDL (je suppose) pas dans la libc. Ce n'est pas le compilateur qui «doit ou non reconnaître» ces types, mais la libc qui peut ou non les fournir ; le standard C couvre et le langage et la bibliothèque standard.
    La norme (>C99) propose aux implémentations de fournir de nouveaux types entiers (signés et non) de taille fixe, si la plateforme le permet. Ces nouveaux types ne sont pas «natifs» mais des typedef de types «natifs» correspondant.

    Pour les utiliser il faut inclure le header standard stdint.h sur les implémentations qui le proposent. Sous Debian tu as une libc qui doit les fournir si tu es sur une plateforme x86 et gcc8 devrait avoir pour défaut une compilation en C11 ou C17.

    Mais surtout il ne faut pas oublier que le standard C ce n'est pas que le langage et le compilo … c'est une implémentation complète avec la libc. Mais c'est vrai que contrairement à C++, les deux parties compilo/libc ne sont pas écrites par les mêmes équipes en général.


    source : C11 7.20 Integer types

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

Discussions similaires

  1. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  3. Quelle est la fiabilité du protocole SSL ?
    Par Anonymous dans le forum Développement
    Réponses: 5
    Dernier message: 05/09/2002, 13h31
  4. apprentissage du C est-il necessaire pour C++ ?
    Par Anonymous dans le forum C
    Réponses: 6
    Dernier message: 02/05/2002, 12h56
  5. C'est quoi exactement un générateur d'états
    Par Henry Cesbron Lavau dans le forum Outils de restitution et d'analyse
    Réponses: 0
    Dernier message: 02/04/2002, 19h15

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