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 :

Fichier binaire et 0x0d 0x0a


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 21
    Par défaut Fichier binaire et 0x0d 0x0a
    Bonjour tout le monde,

    J'ai un problème avec mes écritures de fichiers binaires en C.
    Je dois écrire une sctructure C dans un fichier.

    Premier réflexe, j'ai ouvert le fichier avec cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if((fichier_ticket=open(nom_fichier,O_WRONLY|O_CREAT|O_BINARY|O_TRUNC, S_IREAD|S_IWRITE))<0)
       {puts("erreur ouverture");return(2);}
    Car j'ai lu partout sur le net que en mode texte il y avait des soucis avec les \n, \r etc ... (dtf je comptais pas faire un fichier binaire en mode texte )

    Pour écrire dans le fichier, j'utilise le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(fichier_ticket, &(tkt_opi.cu2), 2);
    Toutes mes données sont bien écrites, sauf, malheureusement les deux caractères suivant: 0x0a, et 0x0d. Dans le premier cas, cela est transformé en 0x0d 0x0a et dans le second cas il n'apparait même pas dans le fichier.

    Ayant lu partout sur le net que la solution à ce problème est de passer le fichier en mode binaire. Ayant depuis le début un fichier en mode binaire, je commence à péter un plomb

    Si vous avez une petit idée du pourquoi du comment, merci de me tenir au courant !

    Zigo ^^

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Il faudrait mieux utilise fopen/fwrite, ce serait déjà un plus.

    Ensuite, essaye de faire un code minimal compilable qui montre le problème car il est difficile de faire un diagnostic comme ça...

    Jc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 21
    Par défaut
    Je fais ca de suite ^^

  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
    Si le mode binaire n'est pas appliqué, c'est sans doute un bug de la bibliothèque standard.
    Avec quoi programmes-tu ? EDI, compilo...
    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 averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 21
    Par défaut
    Citation Envoyé par Médinoc
    Si le mode binaire n'est pas appliqué, c'est sans doute un bug de la bibliothèque standard.
    Avec quoi programmes-tu ? EDI, compilo...
    context pour l'éditeur, et gcc pour le compilateur ^^

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 21
    Par défaut
    En faites il n'y avais ni erreur de programmation, ni erreur de compilation...

    j'utilisais tout simplement un éditeur hexa sous windows pour voir le résultat ... du coup lui virai et remplacais tout ce qu'il voulais ...

    avec un éditeur héxa sous linux, tout va bien dans le meilleur des mondes.

    Faites bien donc attention lorsque vous travaillez avec des fichiers binaires, il ce peux que windows ce moque de vous

  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
    Alors, dans ce cas, c'est ton éditeur hexa qui était buggé, et n'ouvrait pas le fichier en mode binaire...

    On peut savoir quel est l'éditeur en question, pour nos listes noires?
    PS: Tu aurais eu des surprises sur un vieux mac aussi: Avant macOS X, il ses retours à la ligne étaient des \r (les \n étaient donc transformés)
    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
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 21
    Par défaut
    Citation Envoyé par Médinoc
    Alors, dans ce cas, c'est ton éditeur hexa qui était buggé, et n'ouvrait pas le fichier en mode binaire...

    On peut savoir quel est l'éditeur en question, pour nos listes noires?
    PS: Tu aurais eu des surprises sur un vieux mac aussi: Avant macOS X, il ses retours à la ligne étaient des \r (les \n étaient donc transformés)
    C'est l'éditeur: JustHex (http://justhex.tk)

    A savoir que j'avais le même résultat avec UltraEdit.

    Est ce que tu pourrai me conseiller un bon utilitaire gratuit pour éditer mes fichiers en binaire ?

  9. #9
    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
    UltraEdit, c'est pas normal: J'en utilise un parfaitement fiable depuis la vieille version 7.10!

    Sinon, l'outil "Debug" en ligne de commande doit toujours être présent, mais pas toujours pratique...


    Ps: Je viens de tester avec Dev-C++ 4.9.9.2 (gcc 3.4.2/mingW) et mon UltraEdit habituel (UltraEdit-32 11.20a authentique):
    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
    #include <stdio.h>
    #include <io.h>
    #include <fcntl.h>
    #include <sys/stat.h>
    //#include <sys/types.h>
     
    int main(void)
    {
    char const data[] = {0x01, 0x0A, 0x0D, 0x07, 0x0D, 0x0A, 0x46};
    int desc = open(
     "fich.bin",
     O_WRONLY | O_BINARY | O_CREAT | O_TRUNC,
     S_IREAD | S_IWRITE
     );
    if(desc != -1)
    	{
    	write( desc, data, sizeof(data));
    	close(desc);
    	}
    else
    	return 1;
    return 0;
    }
    Sous UltraEdit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    00000000h: 01 0A 0D 07 0D 0A 46                            ; ......F
    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.

  10. #10
    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 : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Médinoc
    UltraEdit, c'est pas normal: J'en utilise un parfaitement fiable depuis la vieille version 7.10!
    Oui, mais il ne faut pas activer la conversion automatique au format DOS.

  11. #11
    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
    En effet, j'avais complètement oublié l'existence d'une telle option...
    Evidemment, une fois qu'on fait toutes les conversions manuellement, y'a plus de problème...
    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.

Discussions similaires

  1. Afficher un fichier binaire sous Windows
    Par Atomikx dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 14/12/2004, 00h29
  2. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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