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 :

Modifier un fichier binaire


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut Modifier un fichier binaire
    Bonjour à tous ,

    Je voudrais créer une application qui recherche dans un fichier binaire une séquence hexadécimale(de longueur variable) et qui une fois la position de cette séquence localisée modifie un octet à un emplacement précis.

    Quelq'un peut-il me dire comment je peut procéder pour rechercher une chaine hexadécimale dans un fichier binaire ?

    Merci d'avance

    Jean-Yves

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut

    tu peux par exemple monter ton fichier binaire en mémoire (memorystream par exemple), et ensuite, tu fais une recherche classique (avec un indexeur de position de recherche et une fonction qui fait la comparaison).. une fois la donnée trouvée (hexa ou pas, on s'en fiche car ceux sont des entiers 16 bits par exemples ou 32 suivant contexte), tu modifies la valeur et tu écris dans ton fichier le contenu de ta memorystream.. et basta

    The Monz, Toulouse

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    Merci pour ta réponse.

    Est-ce que tu pourrais dire ou je pourrais trouver un exemple de lecture de fichier avec binaryReadear je présume.
    Et existe-t-il une méthode pour rechercher une séquence de byte ?

    Merci d'avance

    Jean-Yves

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Le MemoryStream n'apporte rien d'intéressant dans ce cadre, à moins que je passe à côté de quelque chose. Je pense qu'un simple File.ReadAllBytes devrait amplement suffire pour charger le contenu du fichier afin de rechercher la séquence voulue.

    Après pour la recherche comme l'a dit theMonz une recherche classique fera le reste, tu parcours chaque octet du fichier en mémoire et tu fais des comparaisons avec la séquence recherchée jusqu'à ce que tu trouves ton bonheur

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 110
    Par défaut
    OK.
    Afin de faciliter la recherche , je voudrais convertir mon tableau de byte en string aifn d'utiliser la métode IndexOf.

    J'ai trouvé sur le site que je pouvais utiliser la classe encoding mais tous les essais que j'ai fait transcrivent les valeurs en ASCII alors que je veux transcrire 0x65 -> "65" et non pas en "A" .

    Quel est le codage que je dois utiliser pour effectuer cette conversion sans stransformation des données?

    Merci d'avance

    Jean-Yves

  6. #6
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    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
    public class Conversion
        {
            // String to BCD
            public static byte[] str2Bcd(String asc)
            {
                int len = asc.Length;
                int mod = len % 2;
                if (mod != 0)
                {
                    asc = "0" + asc;
                    len = asc.Length;
                }
     
                byte[] abt = new byte[len];
                if (len >= 2)
                    len = len / 2;
     
                byte[] bbt = new byte[len];
                abt = System.Text.Encoding.ASCII.GetBytes(asc);
                int j, k;
     
                for (int p = 0; p < asc.Length / 2; p++)
                {
                    if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9'))
                        j = abt[2 * p] - '0';
                    else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z'))
                        j = abt[2 * p] - 'a' + 0x0a;
                    else
                        j = abt[2 * p] - 'A' + 0x0a;
     
                    if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9'))
                        k = abt[2 * p + 1] - '0';
                    else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z'))
                        k = abt[2 * p + 1] - 'a' + 0x0a;
                    else
                        k = abt[2 * p + 1] - 'A' + 0x0a;
     
                    int a = (j << 4) + k;
                    byte b = (byte)a;
                    bbt[p] = b;
                }
                return bbt;
            }
     
            // BCD To String
            public static string bcd2Str(byte[] bytes)
            {
                StringBuilder temp=new StringBuilder(bytes.Length*2);
                for (int i = 0; i < bytes.Length; i++)//<P> 
                {
                    temp.Append((byte)((bytes[ i ]& 0xf0)>>4));
                    temp.Append((byte)(bytes[ i ]& 0x0f));
                }
     
                return temp.ToString().Substring(0,1).Equals("0")? temp.ToString().Substring(1): temp.ToString();
            }
        }

Discussions similaires

  1. Modifier un fichier ELF en binaire
    Par elo.ch dans le forum Linux
    Réponses: 0
    Dernier message: 02/12/2010, 17h17
  2. Modifier octets fichier binaire
    Par ALGERINO83 dans le forum VB.NET
    Réponses: 4
    Dernier message: 25/04/2009, 18h51
  3. Modifier un fichier binaire
    Par medanis dans le forum C
    Réponses: 2
    Dernier message: 30/04/2008, 16h53
  4. Réponses: 2
    Dernier message: 27/06/2006, 14h33
  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