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

Free Pascal Discussion :

Pointeur en string


Sujet :

Free Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 49
    Points : 20
    Points
    20
    Par défaut Pointeur en string
    Bonjour,

    Je voudrais tansformer le contenu d' un pointeur en string afin de l'afficher ou de l' imprimer en hexadécimal.
    Je ne trouve aucune piste.
    Merci de votre aide,
    Cordialement,
    Philippe.

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    tu veux dire l'adresse du pointeur?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Bonjour et merci de la répons

    Citation Envoyé par darrylsite Voir le message
    tu veux dire l'adresse du pointeur?
    Non : le contenu du pointeur.
    Donc l' adresse pointée.

    Cordialement Philippe.

  4. #4
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Bonjour,

    de mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var PointeurEntier : ^Integer ;
    begin
        Caption := IntToStr(Integer(PointeurEntier)) ;
    end ;
    On a ainsi la valeur du pointeur et donc l'adresse mémoire de la variable.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Bonjour Bubulemaster,

    Citation Envoyé par bubulemaster Voir le message
    Bonjour,

    de mémoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var PointeurEntier : ^Integer ;
    begin
        Caption := IntToStr(Integer(PointeurEntier)) ;
    end ;
    On a ainsi la valeur du pointeur et donc l'adresse mémoire de la variable.
    Alors merci.
    Ma mémoire me trahie.
    Et je mélange les mots clés des langages.
    Je ne savais plus qu'une fonction pouvait avoir le nom d' un mot clé.
    Cordialement , Philippe

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    C'est pas une fonction, c'est du transtypage Pour rappel, un pointeur est stocké sur 32 bits, on peut donc le transtyper vers un entier non signé de 32 bits.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Bonjour wormful,

    Citation Envoyé par wormful_sickfoot Voir le message
    C'est pas une fonction, c'est du transtypage Pour rappel, un pointeur est stocké sur 32 bits, on peut donc le transtyper vers un entier non signé de 32 bits.
    Certes c' est du transtypage. C' est exactement ce que je cherchais.
    Mais c' a ne passe pas par une fonction ?
    C' a y ressemble ?
    Cordialement,
    Philippe.
    P.S. :En tout cas, j' ai été bien dépanné et rapidement.
    On doit pouvoir mettre un pointeur sur une fonction ?

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    C'est pas vraiment une fonction, c'est juste la syntaxe du langage pour le transtypage. En C et consorts, on met le type devant entre parenthèses...

    En ce qui concerne les pointeurs sur fonctions et procédure, c'est faisable avec le signe @, qui marche aussi pour les variables cela dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function plouf: integer;
    begin
      write('plouf');
    end;
     
    var pointerPlouf: Pointer;
    begin
      pointerPlouf := @plouf;
    end.

  9. #9
    ALT
    ALT est déconnecté
    Membre émérite
    Avatar de ALT
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2002
    Messages
    1 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 269
    Points : 2 457
    Points
    2 457
    Par défaut
    Bonjour

    J'arrive un poil en retard, mais le '@' est un peu moins portable, si mon souvenir est bon, que la fonction addr, bien qu'ils s'utilisent de la même façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var ptr:pointer;
        variable:type_quelconque;
    ...
    (**** récupération de l'adresse ****)
    ptr:=addr(variable);
    (**** ou bien ****)
    ptr:=@variable;
    ATTENTION : dans les deux cas, on obtient un pointeur & non un entier
    Quant au type du pointeur il est déterminé par la directive (*$T#*)#=- par défaut. (Guide du programmeur & Guide de référence du BP7).

  10. #10
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    pour visualiser l'adresse d'un pointeur on peu bien entendus faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var S : string;
    begin
      S := IntToStr(integer(ptr));
    end;
    mais c'est illisible.

    autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S := Format('%p',[ptr]); // Format('%.8x', [integer(ptr)]);

    mais cela ne nous affiche QUE l'adresse du pointeur, pas le contenus.

    pour afficher le contenus de ce pointeur c'est autre chose :



    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
     
    type
      pBytes = ^TBytes;
      TBytes = array[0..0] of byte;
     
     
    function ToHex(const Buffer; const BufferSize: integer): string;
    var
      pR : pChar;
      pB : pBytes;
      i, si  : integer;
    const
      BTC : array[$0..$F] of char = '0123456789abcdef';
    begin
      SetLength(result, BufferSize shl 1);
      pR := pChar(result);
      pB := @Buffer;
      for i := 0 to BufferSize-1 do
      begin
        si := i shl 1;
        pR[si] := BTC[pB[i] shr 4];
        pR[si] := BTC[pB[i] and $F];
      end;
    end;
    a utiliser comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SAddress := ToHex(ptr, 4);
    SContent := ToHex(ptr^, PtrSize);

Discussions similaires

  1. [Win] Thread passage Structure pointeur Vector + string
    Par jerem3000 dans le forum Threads & Processus
    Réponses: 2
    Dernier message: 31/10/2012, 15h24
  2. Access check failed : Pointeur et String
    Par hAppywAy dans le forum Ada
    Réponses: 7
    Dernier message: 19/06/2012, 15h11
  3. [Serialization]Pointeurs sur strings et serialize
    Par méphistopheles dans le forum Boost
    Réponses: 2
    Dernier message: 30/08/2010, 20h35
  4. Problème pointeur et string
    Par jodan33 dans le forum Langage
    Réponses: 4
    Dernier message: 25/08/2008, 08h58
  5. Pointeur thread string
    Par KNETUS dans le forum Langage
    Réponses: 1
    Dernier message: 31/08/2007, 18h37

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