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 :

Ouvrir et traduire un fichier .img codé en hexa


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 80
    Par défaut Ouvrir et traduire un fichier .img codé en hexa
    Bonjour à tous,

    j'ai un souci pour ouvrir et traduire un fichier contenant une matrice digne d'une célèbre trilogie.

    Il s'agit d'un fichier .img non standard où de nombreuses informations sont écrites en hexa (doublet de chiffre et lettre).

    J'arrive à ouvrir ce fichier via Hex Editor. Mais sous Matlab, je ne sais comment faire.
    Peut être auriez-vous une solution ?

    Une fois ouvert, je devrai traduire ce fichier en valeurs intéressantes (ie numérique pour moi), mais ceci fera l'objet de questions précises une fois le fichier ouvert ;-).

    Je suis à votre dispo pour vous fournir toutes informations qui vous sembleront nécessaires pour m'aider.

    Par avance, merci.

    Xe4b4ct

  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 317
    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 317
    Par défaut
    Les informations sont écrites en binaire dans le fichier, pas en hexadécimale.

    On utilise la représentation hexadécimale car cela offre une vision plus compacte du contenu du fichier.

    Par exemple si le fichier contient les trois valeurs 1 127 255 codées sur 8bits, la notation hexadécimale 017FFF est plus compacte (et donc plus lisible) que 000000010111111111111111

    Donc tu lis le fichier en binaire et tu converti ensuite chaque paquet de N bits (8 par exemple pour un octet) en format hexadécimal

    Par exemple, octet par octet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fid = fopen('data.img','r');
       Xbin = fread(fid,'*uint8');
    fclose(fid);
     
    Xhexa = dec2hex(Xbin,2)
    C'est l'idée...

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 80
    Par défaut
    Et bien cher(e) Dut, ça marche.

    Merci pour cette première étape.

    Une aide du soft qui me permet d'enregistrer ces fichiers me décrit la structure du fichier. On trouve de WORD, DWORD et BYTE. Je supposer que cela correspond à un nombre d'octets (respectivement : 2, 4 et 8).

    Dans le code que tu m'as proposé, un octet est une ligne. est ce bien ça ?

    Si l'hypothèse est bonne, je dois alors lire les infos éléments par éléments et les traduire en langage compréhensible.

    Je pense que je n'aurai pas de problème pour grouper les informations sosu les paquets de WORD, DWORD et BYTE. Mais j'en aurai pour les traduire en données explicites pour un bleu comme moi.
    Une idée ?

    Par avance, encore merci ;-)

    xe4b4ct

  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 317
    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 317
    Par défaut
    Citation Envoyé par xe4b4ct Voir le message
    On trouve de WORD, DWORD et BYTE. Je supposer que cela correspond à un nombre d'octets (respectivement : 2, 4 et 8).
    Sous Windows, ces données contiennent généralement des valeurs non signées telles que :

    • byte : 8 bits = 1 octet
    • word : 16 bits = 2 octets (2 bytes)
    • dword : 32 bits = 4 octets (4 bytes)


    Les équivalents sous MATLAB devraient donc être :

    • byte : uint8
    • word : uint16
    • dword : uint32



    Citation Envoyé par xe4b4ct Voir le message
    Dans le code que tu m'as proposé, un octet est une ligne. est ce bien ça ?
    Une ligne de quoi ? Un octet représente le groupement de 8 bits, rien de plus.

    Il n'y a pas à proprement parlé de lignes ou de colonnes dans un fichier, juste des valeurs binaires qui se suivent.

    Le code que je t'ai montré lit l'intégralité du fichier sous la forme de paquets de 8 bits non signés.

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 80
    Par défaut
    Re,

    merci pour ces précisions.

    Je vais tenter de m'exprimer avec mes mots.

    La variable Xhexa iobtenue grâce à ton code est une matrice de 100402 lignes et 2 colonnes.

    Lorsque j'affiche la prelière ligne (Xhexa(1,), j'obtiens '49'. La seconde est '4d'. Et cela est parfait, j'obtiens les mêmes valeurs qu'en ouvrant le fichier avec hex editor.

    Je suis une bille en informatique. Quel est le nom générique de '49' ou '4d' : bit ? octet ? ... Je pense que c'est un octet. Pourriez vous me le confirmer.

    Dans un second temps, je cherche à traduire ce 49 et 4c qui doivent me donner un IM. Information valable pour moi, je sais ce que ça veut dire.

    Dans la structure du fichier, le premier paquet est un word. Je pense que c'est ce fameux '494d'. Je cherche une commande Matlab pour pour le traduire en 'IM'. Auriez-vous une idée ?

    Par avance, merci.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Alors... faisons une petit cours très rapide.

    Le bit (c'est le même terme en anglais) est la plus petite unité d'information qui ne prend que deux états : 0 ou 1. Un octet (byte en anglais pour faire simple) est un groupe de 8 bits.

    Ton fichier contient une suite de valeurs binaires et rien d'autre. Dans ton cas, les 16 premiers bits du fichier sont : 10010011001101

    Lu par paquets de 8 bits, tu obtiens 1001001 et 1001101 que tu peux convertir dans n'importe quelle base après :

    • 1001001 (base 2) => 73 (base 10) => 49 (base 16)
    • 1001101 (base 2) => 77 (base 10) => 4D (base 16)


    Maintenant, tu as une information supplémentaire qui est que ces valeurs représentent des chaine de caractères. Il faut donc une nouvelle formule de conversion pour faire cette transformation.

    La plus courante consiste à utiliser les valeurs comme indices dans la table ASCII .

    Tu peux y vérifier que :

    • 73 (base 10) ou 49 (base 16) => I (char)
      77 (base 10) ou 4D (base 16) => M (char)


    Sous MATLAB, la conversion se fait simplement comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fid = fopen('test.img','r');
       Xhexa = fread(fid,'*uint8');
    fclose(fid);
     
    Xchar = char(Xhexa);

Discussions similaires

  1. Comment ouvrir le fichier .img téléchargé avec Akamaï ?
    Par Oppenheimer dans le forum Windows 8
    Réponses: 2
    Dernier message: 16/11/2013, 13h41
  2. Ouvrir un message avec fichier en pièce jointe
    Par drinkmilk dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 21/12/2005, 14h33
  3. Ouvrire ou Enregistrer un Fichier Excel
    Par jo281 dans le forum ASP
    Réponses: 1
    Dernier message: 13/12/2005, 19h55
  4. Création clé usb bootable : ouvir le fichier .img
    Par repié dans le forum Administration système
    Réponses: 2
    Dernier message: 07/12/2005, 16h57
  5. Fichier IMG à graver sur une disquette pour windows
    Par jean christophe dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 14/04/2005, 16h41

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