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

MATLAB Discussion :

Problème avec la création d'un fichier binaire


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 27
    Points : 53
    Points
    53
    Par défaut Problème avec la création d'un fichier binaire
    Salut!

    J'ai besoin d'aide concernant la fonction fwrite de MATLAB.
    En fait, je crée un fichier binaire avec la fonction fwrite. Dans ce fichier, je souhaite écrire les valeurs 10 (sur 1 octet), 11(sur 2 octets) et enfin 12(sur 1 octet). Concernant la valeur 11 que j'écris, je souhaite écrire d'abord le MSB(0x00), ensuite le LSB(0x0b). Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function write(value)
     
    file = fopen('test', 'w');
     
    fwrite(file, 10);
    fwrite(file, value, 'uint16', 0, 'b'); 
    fwrite(file, 12);
     
    fclose('all');
    Lorsque j'exécute ce code en mettant 11 comme paramètre d'entrée de ma fonction, je visualise le résultat avec un éditeur hexadécimal et voilà le ce que j'obtiens :
    octets 0 1 2 3
    valeurs : 0a e0 b0 8b

    Alors que ce que moi j'aimerais obtenir c'est
    octets 0 1 2 3
    valeurs : 0a 00 0b 0c

    J'ai déjà essayé divers paramètres de mes fonctions fwrite et fopen, mais rien n'y fait.
    Autre chose : lorsque j'écris la valeur 10 ensuite la valeur 11, j'obtiens bien 0a 00 0b.
    De même, losrque j'écris la valeur 11, ensuite la valeur 12, j'obtiens bien 00 0b 0c.
    Mais lorsque j'écris les trois valeurs, c'est là où j'obtiens 0a e0 b0 8b!!!

    Si quelqu'un pouvait me dire comment résoudre mon problème...
    Merci d'avance!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Quel éditeur hexa utilises-tu pour vérifier le contenu du fichier ?
    Sous quel système d'exploitation travailles-tu ?

    Le code suivant fonction bien sous Windows XP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    fid = fopen('test', 'w');
     
        fwrite(fid, 10);
        fwrite(fid, 11, 'uint16', 0, 'b'); 
        fwrite(fid, 12);
     
    fclose(fid);
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 27
    Points : 53
    Points
    53
    Par défaut
    Salut!
    J'utilises notepad++ avec le plugin Hex-Editor, le tout sur Windows XP. C'est bizarre parce que des fois j'obtiens biens les valeurs souhaitées, des fois non. C'est pratiquement aléatoire et je ne sais pas où le problème se situe!!

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Alors... le problème est que Notepad++ ouvre le fichier en mode texte en choisissant un encodage par défaut (ANSI si je ne me trompe pas).

    Or par exemple sur ma machine quand je crée le fichier binaire, l'encodage par défaut est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >> fid = fopen('test','r');
    >> [filename, permission, machineformat, encoding] = fopen(fid);
    >> fclose(fid);
    >> encoding
     
    encoding =
     
    windows-1252
    Il faut donc convertir l'encodage du fichier avant d'utiliser le plugin Hex-Editor.

    Une fois le fichier ouvert sous Notepad++, tu vas dans le menu Encodage > Codage des caractères > Langues d'Europe occidentale > Windows-1252

    Tu peux maintenant utiliser le plugin qui devrait te donner les valeurs hexadécimales correctes.

    Une autre solution consiste à utiliser un "vrai" éditeur hexadécimale
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 27
    Points : 53
    Points
    53
    Par défaut
    Merci pour ta réponse!

    Problème résolu.
    Je suis tout à fait d'accord avec toi pour choisir un 'vrai' éditeur hexadécimal!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/02/2014, 20h04
  2. Réponses: 1
    Dernier message: 21/01/2009, 17h22
  3. Problème avec la création d'un fichier de controle
    Par bestsuan dans le forum Administration
    Réponses: 10
    Dernier message: 08/09/2008, 03h22
  4. Problème avec la création d'un fichier d'aide
    Par Hoopsy dans le forum C++Builder
    Réponses: 21
    Dernier message: 08/08/2007, 21h45
  5. Réponses: 2
    Dernier message: 29/03/2004, 18h29

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