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 :

Compréhension de fseek


Sujet :

C

  1. #1
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut Compréhension de fseek
    Bonjour !!

    J'ai trouver une source de programme sur internet, et j'aimerai comprendre comment elle fonctionne. Cependant je ne comrpend pas les deux dernières lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monmp3	= fopen(nomfichier.data(), "rb");
     
    fseek(monmp3, 0L, SEEK_END);
    fseek(monmp3, -128L,SEEK_CUR);
    Si quelqu'un pourrait m'expliquer ce que sa veut dire

  2. #2
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Le fseek permet de se positionner dans un fichier.

    2 arguments, une certaine longeur de déplacement(le 2ème de la fonction), à partir d'un certain endroit (le 3ème argument)


    SEEK_SET : positionnement par rapport au début de fichier
    SEEK_CUR : positionnement par rapport à la position courante:
    SEEK_END : positionnement par rapport à la fin de fichier.

    fseek(monmp3, 0L, SEEK_END); : on se déplace de 0 caractère à partir de la fin du fichier (SEEK_END) : on se place à la fin du fichier !

    fseek(monmp3, -128L,SEEK_CUR); : on se déplace de 128 caractères avant la position courante

  3. #3
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    D'accord je comprend mieux !!

    donc quand après le programme fait cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fread(&TAGv1,sizeof(char),128,monmp3);
    Il lit les 128 caractère à partir du curseur dans le fichier(en sachant que 1 caractère est un égale a 8 bits grace au sizeof(char)) et place ce qu'il a lut dans TAGv1


    Mais j'ai encore une question comment se fait - il que lors du positionnement, on se place par rapport a un nombre de caractère et nom par rapport a un nombre de bit vu que le fichier est ouvert en mode binaire ?

  4. #4
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Binaire : on lit des octets sans interprétation (0x0D 0x0A : tranformés en retour chariot pour le texte)

    Texte : on lit des octets supposés être des octets de texte (d'ou la conversion évoquée ci-dessus)

  5. #5
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Donc la conversion s'effecute lors de l'assignation d'un octet (en héxadécimal) à une variable de type char. Je comprend.

    Donc finalement je peux tout aussi bien ouvrir le fichier en mode texte ?
    cela ne fait aucune différence ?

    Est- il possible de précisez a une variable de type chare une valeur binaire (un octet binaire) ?

  6. #6
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Encore une question :

    Pourquoi on met -128L et OL et pas -128 et 0 ?

    Il sert a quoi le L ?

    Merci d'avance

  7. #7
    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
    Points : 6 498
    Points
    6 498
    Par défaut
    Est- il possible de précisez a une variable de type chare une valeur binaire (un octet binaire) ?
    Bien sur, la variable de type char a une longueur de 1 octet, tu lui mets ce que tu veux dedans.
    Simplement, le texte est traduit en octets, donc les valeurscomprises entre 32 et 126 sont ce qu'on appelle des caractères imprimables. Le code ASCII étendu correspond aux valeurs entre 128 et 255, qui donne aussi à l'impression (écran ou papier) certaines lettres accentuées, ou des zigouigoui, tout dépend de l'OS, de la machine utilisée etc, (ceci dit je ne suis pas spécialiste mais "en gros", c'est à peu près celà).
    Pour te rendre compte tu peux tester ce petit programme à l'écran et sur ton imprimante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i = 128; i < 256; i++)
      printf("%02X : %3d : %c", i, i, i)
    Deuxième question : pourquoi 0L ou -128L et non pas 0 ou -128 ?
    Parce que le deuxième argument de fseek est un long, et c'est pour respecter la syntaxe, peut-être que certains compilateurs refusent -128 mais je n'en suis pas sûr.

  8. #8
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Ok.

    Pour la première question comment faire pour entrer une valeur binaire dans une variable char ?

    En héxa on ferait comme cela :
    En binaire on ferait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c:
    c = ?????? //valeur binaire
    et pour la deuxiüme question, je comprend maintenant je ne savais aps que mettre un L derrière un chiffre le mettait au format long

    Merci de m'aide en tout cas

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Seboubou86
    comment faire pour entrer une valeur binaire dans une variable char ?

    En héxa on ferait comme cela :
    En binaire on ferait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c:
    c = ?????? //valeur binaire
    Contrairement au langage Ada, le langage C ne supporte pas de format de constante binaire. Il est néanmoins extrêmement simple avec un peu d'habitude de coder mentalement le binaire en octal (groupes de 3 bits) ou en héxadécimal (groupes de 4 bits). Inversement, un nombre en héxadécimal se décompose 'à vue ' en binaire. Il suffit de se souvenir du codage de chaque digit (0-F)

    Héxadécimal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    0x0 = 0000
    0x1 = 0001
    0x2 = 0010 
    0x3 = 0011 
    0x4 = 0100 
    0x5 = 0101 
    0x6 = 0110 
    0x7 = 0111 
    0x8 = 1000 
    0x9 = 1001 
    0xA = 1010 
    0xB = 1011 
    0xC = 1100 
    0xD = 1101 
    0xE = 1110
    0xF = 1111
    Par exemple 0x12 vaut 0001 0010, soit 10010 en binaire.
    11101100010 vaut : 111 0110 0010 soit 0x762

  10. #10
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Points : 133
    Points
    133
    Par défaut
    Ok merci je connaissais la transformation, mais je voulais savoir si on pouvait le faire direct en binaire !!

    Mais apparement pas, Merci bien de cette info


    Voila je pense avoir bien compris comment cela fonctionnait !!

    Merci bien a tous (et surtout à trap_d) pour votre aide !!

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

Discussions similaires

  1. Compréhension de fseek()
    Par SPACHFR dans le forum C
    Réponses: 8
    Dernier message: 02/03/2010, 15h20
  2. [FLASH MX] Prob de compréhension des bouttons
    Par WriteLN dans le forum Flash
    Réponses: 13
    Dernier message: 16/10/2003, 17h01
  3. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  4. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07
  5. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17

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