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 :

fonctionnement de fread


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut fonctionnement de fread
    Bonjour,

    Ci-dessous une petite question sur fread... quelqu'un pourrait m'expliquer ce qu'y se passe concrètement dans le code... ?

    Alors moi je répondrais que fread lit en binaire, et donc la il va lire un octet, donc logiquement dans a il y aura 1 ? C'est cela ou pas ?

    Je ne comprends pas trop pourquoi c'est demandé de donnez la valeur ou le moyen de la calculer...

    A mon avis c'est trop simpliste comme j'ai vu le truc, fread ne doit pas fonctionner comme cela... ?

    Merci
    ++


    Quel est le contenu de la variable a dans le code suivant si le fichier contient les caractères 127 ? Donnez la valeur ou le moyen de la calculer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    short a;
    fread(&a, sizeof(short), 1, FID);

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Si le fichier est constitué uniquement de caractères 127 (\x7F) et qu'on suppose qu'on est sur une plate-forme x86, alors cela signifie que deux octets seront lus et écraseront a.
    Ces octets ayant chacun la valeur 0x7F, a vaudra donc 0x7F7F.
    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
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    J'ai pas trop compris dsl...
    Si on a les caractères 127, chaque caractère est sur un octet non ? Et donc si on lit que un octet, on récupère le premier, donc le caractère 1... ?

    Je ne comprends pas "127 (\x7F)" pour commencer...

    Et pourquoi 2 octets seront lus ?

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    127 == 0x7F == 0177

    Et 2 octets sont lus, car sizeof(short)==2.
    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.

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    ah oui j'avais zappé, on lit effectivement les 2 premiers octets mais c'est la que je comprends pas a quoi correspondent ces 2 premiers octets ... ??

    un caractère c'est sur un octet, donc lire les 2 premiers octets, revient à lire les 2 premiers caractères non ? on devrait lit donc d'abord le 1 puis le 2 qui écrase la valeur dans a donc au final on a 2 dans a... je sais pas je vois le truc comme ca...

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben non, tu lis 1 dans le premier octet de a et 2 dans le second...

    Donc le résultat est ce que vaut en binaire un short où le premier octet vaut 1 et le 2ième vaut 2 ....

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    AH, j'aurais mal compris ce que signifie "les caractères 127" ?
    Je pensais qu'il s'agissait d'un fichier constitué uniquement d'octets à la valeur 127.

    Comme quoi, si on veut une bonne réponse, il faut poser une bonne question...
    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.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben moi j'ai compris que c'était un fichier texte avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ cat fichier.txt
    127
    $
    (les caractères 127..)

    Mais qu'on lit ce fichier avec un fread de 2 octets stockés dans un short...

  9. #9
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    ouep ouep donc on recommence lol

    On a un fichier texte dans lequel il y a les caractères 127

    Avec fread, on lit les 2 premiers octets du fichier et on les place dans a.

    Donc le tout est de savoir ce que contienne ces 2 premiers octets du fichier lol

    Si 127 sont des caractères, chacun est codé sur un octet normalement non ? Donc 127 <=> 3 octets... Donc comme on récupère les 2 premiers octets, on récupère l'octet du caractere 1 et l'octet du caractère 2... c'est bien ca ?

    Mais a étant de type short, et dedans on a mis des caractères, la question est
    "Comment Donnez la valeur de a ou le moyen de la calculer ?"

    a vaut 12 ou pas ?

  10. #10
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par italiasky
    On a un fichier texte dans lequel il y a les caractères 127
    tu n'as pas les caractères 127 mais les caractères '1', '2' et '7' ce qui est complètement différent.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par italiasky
    Mais a étant de type short, et dedans on a mis des caractères, la question est
    "Comment Donnez la valeur de a ou le moyen de la calculer ?"

    a vaut 12 ou pas ?
    Je ne pense pas.... JE vais donner mon sentiment, mais je suis totalement nul en binaire, donc corrigez moi svp ...

    Le premier octer du short vaut 1 en binaire (ce qui doit être si je ne me trompe 00000001 ) et le deuxième octet vaut 2 ce qui doit être 00000010

    Donc a devrait valoir 00000001 00000010

    ce qui donne je ne sais pas...

    259 ??

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Sur un x86, qui est une architecture little-endian, le premier octet est l'octet bas du nombre.

    Donc, a vaudra, en hexa, 0x0201. Ce qui à vue de nez, doit signifier 513 en décimal.

    PS: Pour 0x0102, tu n'étais pas loin, mais je pense que ça ferait plutôt 258.
    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.

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc
    PS: Pour 0x0102, tu n'étais pas loin, mais je pense que ça ferait plutôt 258.
    t'as raison... J'ai compté 256 et pas 255... Honte à moi

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Euh...
    C'est l'inverse... 0x0102 = 256+2 = 258...
    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.

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ooooppsssssss ....

    Bon scusez je vais reprendre un pttit café là....

    Bon je devrais faire hara-kiri de mon post précédent..

    PS : ça me rassure quand même.. Mon inculture basique en binaire a quand même quelques lacunes et j'ai quand même quelques notions de ce qui se passe...

  16. #16
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    La representation de '1' est 0x31 dans les codes derives de l'ASCII (la majorite) et 0xF1 en EBCDIC (on va passer sur les autres). De meme, la representation de '2' est 0x32 (0xF2).

    Donc si le short fait deux char de 8 bits (on va passer sur les autres cas), suivant la boutitude de l'architecture, on va lire 0x3132 (12594 en decimal), 0x3231 (12849), 0xF1F2 (61938 en non signe, -3598, -3597, -29170 suivant la representation signee), 0xF2F1 (62193, -3343, - 3342, -29425)

  17. #17
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 italiasky
    Quel est le contenu de la variable a dans le code suivant si le fichier contient les caractères 127 ? Donnez la valeur ou le moyen de la calculer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    short a; fread(&a, sizeof(short), 1, FID);
    Il n'y a pas de réponse portable à cette question. Ca peut être
    • 0x7F (127)
    • 0x7F7F (32639)
    • 0x7F7F7F7F (2139062143)
    etc.

    Tout dépend de la taille d'un short sur cette machine.

    Et si il s'agit d'une chaine de caractères, il est encore plus difficile de donner une réponse.

  18. #18
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Jean-Marc : Merci.
    Comme ça, on était tous les deux à côté de la plaque...

    Emmanuel : C'est ce que je croyais aussi, mais vu la suite du thread, ce n'est pas ça.

    On dirait que tu as l'habitude de répondre au premier post sans lire le reste du thread. Ce n'est généralement pas un problème, mais quand la question évolue ou se précise entretemps, on a l'impression que tu débarques...
    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.

  19. #19
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    En gros, je pense, pour résumer c'est que dans a de type short (dc 2 octets) on a les bits du caractere 1 puis ceux du caractere 2 : 0000000100000010

    Ca parait logique...

  20. #20
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Sauf que Jean-Marc a soulevé le problème : '1' != 1...
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/05/2003, 14h51
  2. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 21h49
  3. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 21h46
  4. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10
  5. fwrite et fread
    Par bohemianvirtual dans le forum C
    Réponses: 5
    Dernier message: 05/06/2002, 12h24

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