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.
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.
Bonjour,
de mémoire :
On a ainsi la valeur du pointeur et donc l'adresse mémoire de la variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 var PointeurEntier : ^Integer ; begin Caption := IntToStr(Integer(PointeurEntier)) ; end ;
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.
Bonjour wormful,
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 ?
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.
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 :
ATTENTION : dans les deux cas, on obtient un pointeur & non un entier
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;
Quant au type du pointeur il est déterminé par la directive (*$T#*) où #=- par défaut. (Guide du programmeur & Guide de référence du BP7).
pour visualiser l'adresse d'un pointeur on peu bien entendus faire ceci :
mais c'est illisible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 var S : string; begin S := IntToStr(integer(ptr)); end;
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 :
a utiliser comme suis :
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;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SAddress := ToHex(ptr, 4); SContent := ToHex(ptr^, PtrSize);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager