fgets : stocker dans des variables différentes à la ceuleuleu
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

fgets : stocker dans des variables différentes à la ceuleuleu



  1. #1
    AmigaOS

    fgets : stocker dans des variables différentes à la ceuleuleu


    ------

    Bonjour

    J’aimerais créer un programme en C qui lit l‘entête d’un fichier .wave, en stockant les informations dans des variables de type unsigned long int, et qui les affiches ensuite en hexadécimal.
    Voici ce que j’ai écris :
    Code:
         fgets(&FileTypeBlocID, 4, fichier) ; //M’affiche 0x464952 au lieu de 0x46464952
         fgets(&FileSize, 4, fichier) ;  //M’affiche 0xA62446 au lieu de 0x000EA624
         fgets(&FileFormatID, 4, fichier) ;
         fgets(&FormatBlocID, 4, fichier) ;
         fgets(&BlocSize, 4, fichier) ;
         fgets(&AudioFormat, 2, fichier) ;
         fgets(&NbrCanaux, 2, fichier) ;
         fgets(&FrequenceEch, 4, fichier) ;
         fgets(&BytePerSec, 4, fichier) ;
         fgets(&BytePerBloc, 2, fichier) ;
         fgets(&BitsPerSample, 2, fichier) ;
         fgets(&DataBlocID, 4, fichier) ;
         fgets(&DataSize, 4, fichier) ;
    
    printf ("FileTypeBlocID   : %X\n   FileSize      : %X\n   FileFormatID  : %X\n   FormatBlocID  : %x\n   BlocSize      : %x\n   AudioFormat   : %x\n   NbrCanaux     : %x\n   FrequenceEch  : %x\n   BytePerSec    : %x\n   BytePerBloc   : %x\n   BitsPerSample : %x\n   DataBlocID    : %x\n   DataSize      : %x\n", FileTypeBlocID, FileSize, FileFormatID, FormatBlocID, BlocSize, AudioFormat, NbrCanaux, FrequenceEch, BytePerSec, BytePerBloc, BitsPerSample, DataBlocID, DataSize) ;
    Le problème est que pour fgets(&FileTypeBlocID, 4, fichier) ; mon programme m’affiche que 3 octets du nombre en hexa. (0xXXXXXX) alors que j’en demande 4 : (0xXXXXXXXX). Quand je met fgets(&FileTypeBlocID, 5, fichier) ; cela m’affiche la bonne valeur. Mais la ligne d’après est alors faussée… Comment résoudre ce problème ?

    Merci

    -----

  2. #2
    lou_ibmix_xi

    Re : fgets : stocker dans des variables différentes à la ceuleuleu

    Comment résoudre ce problème ?
    En lisant le manuel de fgets, en se rendant compte que c'est une fonction orientée "NUL-terminated string", et en utilisant fread à la place?
    Solution alternative: en utilisant une bibliothèque qui existe, comme libsndfile par exemple. (cette solution alternative n'est bien sûr pas valable si c'est pour un exercice)

  3. #3
    AmigaOS

    Re : fgets : stocker dans des variables différentes à la ceuleuleu

    Merci, ça marche

  4. #4
    JPL
    Responsable des forums

    Re : fgets : stocker dans des variables différentes à la ceuleuleu

    Je ne vais pas corriger tous les titres mais en français c'est "à la queue le leu" (le leu = le loup en ancien français... parce que les meutes de loups sont censées marcher... en file indienne )
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  5. A voir en vidéo sur Futura
  6. #5
    whoami

    Re : fgets : stocker dans des variables différentes à la ceuleuleu

    Bonjour,

    En fait, c'est "à la queue leu leu".

    Eh oui, ça peut paraître bizarre, mais c'est ainsi.

  7. #6
    AmigaOS

    Re : fgets : stocker dans des variables différentes à la ceuleuleu

    Pourquoi j'ai écrit queue avec un 'c' ? ^^

Discussions similaires

  1. Scilab: Stocker des valeurs dans vecteur et matrice
    Par invitec94a53e1 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 06/12/2012, 23h09
  2. comment utiliser des données stocker dans un package en vhdl?
    Par invitec2f0ffc9 dans le forum Électronique
    Réponses: 5
    Dernier message: 10/05/2012, 17h57
  3. caser des variables dans un emplacement bien précis au niveau des banques...
    Par invite4cca36da dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 05/05/2010, 13h47
  4. Significations pétrologiques de différentes variables
    Par invite9199aefc dans le forum Géologie et Catastrophes naturelles
    Réponses: 3
    Dernier message: 06/01/2010, 15h54