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 :

Lecture binaire écriture sous forme d'entier


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut Lecture binaire écriture sous forme d'entier
    Bonjour
    Actuellement, je possède un fichier d'entiers stockés sur deux octets, je voudrais lire ce fichier d'entiers, pour en sortie du programme obtenir les valeurs contenues dans ce fichier, mais directement stockées sous leur forme short.
    Or, j'ai du m'emmeler les pinceaux un peu partout. Par d'erreur de compilation, mais mis à part la création du fichier de sortie, mon programme ne fait pas grand chose...
    Je mets le fichier en pièce jointe. Si vous pouviez me dire ce que vous en pensez. Je précise que je suis une grosse bille en développement, mis à part peut-être le web.
    merci d'avance.
    Fichiers attachés Fichiers attachés
    • Type de fichier : c truc.c (690 octets, 41 affichages)

  2. #2
    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 titours254 Voir le message
    Actuellement, je possède un fichier d'entiers stockés sur deux octets, je voudrais lire ce fichier d'entiers, pour en sortie du programme obtenir les valeurs contenues dans ce fichier, mais directement stockées sous leur forme short.
    Il manque une information importante. Comment sont codés les entiers dans le fichier binaire ?

    2 octets . OK, mais MSB ou LSB en tête ?

    Par exemple l'entier 0x1234 est codé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [0] 0x12 MSB en tête
    [1] 0x34
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [0] 0x34 LSB en tête
    [1] 0x12
    Ton code est court, il aurait pu être copié/collé dans le corps du mesage entre les balises qui vont bien...

    Par contre, il fout la trouille :
    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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:9: warning: function declaration isn't a prototype
    main.c: In function `main':
    main.c:10: warning: assignment makes pointer from integer without a cast
    main.c:10: warning: suggest parentheses around assignment used as truth value
    main.c:12: warning: assignment makes pointer from integer without a cast
    main.c:12: warning: suggest parentheses around assignment used as truth value
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 2 seconds)
    0 errors, 5 warnings
    Beaucoup trop d'erreurs dans ton code... Ceci fonctionne :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #ifdef WIN32
    /* visualiser le fichier cree */
    #define CAT "type"
    #else
    #define CAT "cat"
    #endif
     
    /* 0=LSB en tete 1=MSB en tete */
    #define MSB_EN_TETE 1
     
    /* 0=normal 1=debug */
    #define DBG 1
     
    #if DBG
    /* créer un fichier binaire si il n'existe pas... */
    static void make_file (char const *fname)
    {
       FILE *fp = fopen (fname, "wb");
       if (fp != NULL)
       {
          unsigned i;
          for (i = 0x1000; i < 0x1000 + 10; i++)
          {
    #if MSB_EN_TETE
             fputc ((i >> (8 * 0)) & 0xFF, fp);
             fputc ((i >> (8 * 1)) & 0xFF, fp);
    #else
             fputc ((i >> (8 * 1)) & 0xFF, fp);
             fputc ((i >> (8 * 0)) & 0xFF, fp);
    #endif
          }
          fclose (fp);
       }
    }
    #endif
     
    int main (void)
    {
    #define f_in "conso1.bin"
    #define f_out "sortie.txt"
     
       int ret = EXIT_SUCCESS;
       FILE *entree = fopen (f_in, "rb");
       if (entree != NULL)
       {
          FILE *sortie = fopen (f_out, "w");
          if (sortie != NULL)
          {
             unsigned char tmp[2];
             while (fread (tmp, sizeof tmp, 1, entree) == 1)
             {
                unsigned int val = 0;
     
    #if MSB_EN_TETE
                val |= (tmp[0] & 0xFF) << (0 * 8);
                val |= (tmp[1] & 0xFF) << (1 * 8);
    #else
                val |= (tmp[0] & 0xFF) << (1 * 8);
                val |= (tmp[1] & 0xFF) << (0 * 8);
    #endif
     
                printf ("%04X ", val);
                fprintf (sortie, "%u\n", val);
             }
             fclose (sortie);
             printf ("\n\n");
     
             system (CAT " " f_out);
          }
          else
          {
             perror (f_out);
             ret = EXIT_FAILURE;
          }
          fclose (entree);
       }
       else
       {
          perror (f_in);
          ret = EXIT_FAILURE;
    #if DBG
          make_file (f_in);
    #endif
       }
       return ret;
     
    }
    pose des questions si tu ne comprends pas.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    A priori MSB dixit mon sujet ...

    Merci.

    ed : je me plonge dedans et je reviens

  4. #4
    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 titours254 Voir le message
    A priori MSB dixit mon sujet ...

    Merci.
    Résolu ? Pas de questions ?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Je me rends compte maintenant que j'avais pris tout le problème à l'envers.
    Merci beaucoup pour ton aide.

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

Discussions similaires

  1. implementer une faune sous forme d'arbre binaire.
    Par mansour67 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/04/2008, 17h22
  2. Réponses: 7
    Dernier message: 26/06/2007, 10h36
  3. Heure sous forme d'un entier
    Par Arnaud F. dans le forum C
    Réponses: 2
    Dernier message: 12/02/2007, 22h01
  4. [MySQL] Afficher image stockée sous forme binaire
    Par Luffy Duck dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/12/2005, 18h30
  5. Réponses: 2
    Dernier message: 26/04/2004, 13h55

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