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

 Delphi Discussion :

Manipuler de l'hexadécimal et du binaire ?


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut Manipuler de l'hexadécimal et du binaire ?
    Bonjour,
    Je souhaiterais faire quelques opérations sur un fichier en hexadécimal et binaire mais je trouve peu d'informations sur le sujet (ou je n'ai pas les bons mots clés).
    Je souhaiterais faire les choses suivantes :
    - Ouvrir un fichier (lecture seule suffisante) et le charger en mémoire : est-ce qu'un FileOpen avec un fmOpenRead est suffisant ? Y a-t-il une meilleure méthode pour charger entièrement le fichier en mémoire ?
    - Me déplacer dans le fichier en donnant des adresses hexa : y a-t-il une fonction qui permette de se déplacer directement dans un fichier ?
    - Lire des portions du fichier : faut-il utiliser BlockRead ?
    - Accéder uniquement à certains bits d'une valeur hexa : je pense qu'il suffit de faire un masque avec un "and" pour ce point)
    Ce serait déjà un bon début avec ces éléments
    Merci par avance !

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    Salut

    je te conseil de prendre un TFileStream descendant de TStream

    pour te deplacer il existe la fonction seek
    pour savoir si tu est a la fin de fichier il suffit de comparer la taille et la position de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Eof := F.Position >= F.Size
    pour tes déplacement en hexa j'ai bien peur qu'il faille convertir l'hexa en entier
    la fonction te permet de lire un buffer de taille quelconque
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Merci pour cette réponse.
    Le TFileStream charge le fichier en mémoire ? Je croyais qu'il accédait séquentiellement au fichier mais je dois confondre avec autre chose.
    Je ne pense pas que ce soit un souci pour moi de convertir mes hexa en entier ou vice versa, il faut que j'analyse l'utilisation de la fonction Seek pour voir comment elle fonctionne.
    Et quand tu dis que la fonction permet de lire un buffer de taille quelconque tu parles de BlockRead ?

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Merci pour ton aide, j'ai finalement réussi ce que je voulais avec FileOpen, FileRead et FileSeek

  5. #5
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Citation Envoyé par NicCo Voir le message
    Merci pour cette réponse.
    Le TFileStream charge le fichier en mémoire ? Je croyais qu'il accédait séquentiellement au fichier mais je dois confondre avec autre chose.
    Effectivement, on lit le fichier bloc par bloc, mais il est possible de copier le contenu du fichier dans un TMemoryStream avec la méthode LoadFromStream ou plus directement tu peux charger le fichier avec la méthode LoadFromFile dans un TMemoryStream.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par NicCo Voir le message
    Merci pour ton aide, j'ai finalement réussi ce que je voulais avec FileOpen, FileRead et FileSeek
    Tu aurais au la même chose avec TFileStream.Create (équivalent du FileOpen), TFileStream.Read et TFileStream.Seek
    Puisque le TFileStream est une encapsulation de FileOpen, FileRead et FileSeek

    Que ce soit avec FileOpen ou TFileStream, le fichier n'est absolument pas chargé en mémoire, il est juste manipuler via un Handle.
    Après tout dépend de la taille lu via FileRead, évidemment, si tu utilises FileSize comme taille de la lecture, tu charges ton fichier d'un coup.

    D'ailleurs, AssignFile+Reset, BlockRead et Seek, donne en fait aussi le même résultat que FileOpen, FileRead et FileSeek

    Au final, sur Windows, toutes ces fonctions utilisent CreateFile (Open), ReadFile et SetFilePointer (Seek)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Manipulation binaire de fichiers
    Par Vladislav IV dans le forum Général Python
    Réponses: 1
    Dernier message: 04/08/2006, 11h33
  2. manipulation en binaire
    Par joecool2005 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/12/2005, 15h25
  3. Réponses: 15
    Dernier message: 03/10/2005, 16h49
  4. Manipulation de données binaires
    Par Defre87 dans le forum Général Python
    Réponses: 3
    Dernier message: 28/09/2005, 16h16
  5. Manipulations binaires : savoir si un bit est "set"
    Par DiGiTAL_MiDWAY dans le forum Général Python
    Réponses: 2
    Dernier message: 18/09/2005, 16h42

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