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 :

taille des variables


Sujet :

C

  1. #21
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Tu supposes que les octets sont répartis un par char (plutôt que par exemple 9 par groupe de 2 mots de 36 bits -- format ayant été utilisé pour du transfert avec des machines 36 bits). C'est assez difficile de faire sans une supposition de ce genre, mais elle limite (faiblement) la portabilité.
    Je croyais que c'était garanti et que fgetc(), par exemple, opérait un mapping octet->unsigned char, mais il semble que je me sois trompé. Y a-t'il un moyen de faire sans cette supposition?

    Merci d'avance et meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  2. #22
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par cmoibal Voir le message
    oui, il existe la bibliotheque types.h, qui offret les type standard ( u_int32, uint16, uint8, ... )
    Uniquement en C99 et si la plateforme les supporte. Ces types sont standards C99, mais pas portables.

    Et c'est pas types.h, mais <stdint.h>

    http://www.opengroup.org/onlinepubs/.../stdint.h.html

  3. #23
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Y a-t'il un moyen de faire sans cette supposition?
    Je n'en vois pas.
    A ma connaissance, pour effectuer une lecture de fichier binaire, il est necessaire a un moment ou un autre de faire une supposition sur la plateforme.

    Le tout c'est d'en etre conscient, de faire le choix le plus judicieux possible (en ce sens, ton choix est, a mon humble avis, plutot bon puisu'un nombre important de plateforme fonctionne de la sorte) et eventuellement d'isoler ce code dans un module specifique qui pourra facilement etre adapte lors d'un portage vers une architecture particuliere.

  4. #24
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Je croyais que c'était garanti et que fgetc(), par exemple, opérait un mapping octet->unsigned char, mais il semble que je me sois trompé. Y a-t'il un moyen de faire sans cette supposition?
    Je ne vois pas. C'est le coeur des problemes de transferts de données entre systèmes ayant des représentations réellement différentes. Le seul système à mots de 36 bits que j'ai utilisé avait des options permettant de choisir un format parmi plusieurs quand il lisait des bandes magnétiques* (j'en ai donné un, il y a avait d'autres, par exemple ignorer le 8ième bit de chaque octet et mettre 5 char de 7 bits par mots de 36 bits -- format peu pratique pour une implémentation du C mais qui était le format texte normal).

    -- Jean-Marc
    * Un format très répandu de bande magnétique utilisait 9 pistes, 8 de données et une de parité, les IO avec elles étaient donc intrinsèquement en octets. Les disques étaient formattés pour des mots de 36 bits et n'utilisaient pas des octets. Pour les transferts via les réseaux, voir par exemple l'option tenex dans les RFC du FTP.

  5. #25
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Merci pour tout, Jean-Marc et gl! (J'ai vraiment encore beaucoup à apprendre dans ce domaine. Enfin, pas que dans ce domaine...)

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #26
    Membre chevronné
    Homme Profil pro
    Enseignant retraité
    Inscrit en
    Juin 2004
    Messages
    547
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant retraité

    Informations forums :
    Inscription : Juin 2004
    Messages : 547
    Par défaut
    Je vous remercie tous également. C'était très instructif.

    Ayant eu réponse à ma question d'origine, je pense que je peux considérer le problème comme résolu.

  7. #27
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    Merci pour tout, Jean-Marc et gl! (J'ai vraiment encore beaucoup à apprendre dans ce domaine. Enfin, pas que dans ce domaine...)
    Ne t'en fait pas, l'utilité de ces choses est quand même faible.

    Pour complèter ce qui a déjà été écrit, on a trois choses: un format externe logique, un format physique externe et le format interne. Si les trois sont proches (i.e. tous exprimés en terme de suites de bytes de même taille), il y a des chances d'avoir la correspondance évidente (mais pas de garantie, une implémentation qui ferait un XOR avec 0xDEADBEAF de chaque byte lu ou écrit serait conforme! et on peut imaginer des cas où la correspondance évidente n'est pas la meilleure chose à faire). Si deux d'entre eux sont éloignés (le format logique externe défini en terme d'octets, le format physique externe défini en terme de mots de 36 bits, le format interne imposé par le C exigeant des char d'au moins 8 bits recouvrant toute la mémoire ne sont pas si proches que cela l'un de l'autre, surtout les deux premiers), il va falloir faire des hypothèses sur la manière dont les choses se correspondent entre elles.

  8. #28
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Ne t'en fait pas, l'utilité de ces choses est quand même faible.

    Pour complèter ce qui a déjà été écrit, on a trois choses: un format externe logique, un format physique externe et le format interne. Si les trois sont proches (i.e. tous exprimés en terme de suites de bytes de même taille), il y a des chances d'avoir la correspondance évidente (mais pas de garantie, une implémentation qui ferait un XOR avec 0xDEADBEAF de chaque byte lu ou écrit serait conforme! et on peut imaginer des cas où la correspondance évidente n'est pas la meilleure chose à faire). Si deux d'entre eux sont éloignés (le format logique externe défini en terme d'octets, le format physique externe défini en terme de mots de 36 bits, le format interne imposé par le C exigeant des char d'au moins 8 bits recouvrant toute la mémoire ne sont pas si proche que cela l'un de l'autres, surtout les deux premiers), il va falloir faire des hypothèses sur la manière dont les choses se correspondent entre elles.
    Merci!

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Limite en taille des variables Globalmemorystatus
    Par rgourlet dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2008, 11h23
  2. La tailles des variables ?
    Par Midou45 dans le forum Débuter
    Réponses: 10
    Dernier message: 25/04/2008, 19h14
  3. [Tableaux] Taille des variables
    Par Teoftene dans le forum Langage
    Réponses: 5
    Dernier message: 06/03/2008, 22h56
  4. [TP] Comment contourner la limite de taille des variables ?
    Par celinec62 dans le forum Turbo Pascal
    Réponses: 12
    Dernier message: 20/04/2007, 21h00
  5. taille des variables ou des objets?
    Par BobLBricoleur dans le forum Flash
    Réponses: 4
    Dernier message: 27/12/2005, 14h57

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