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.
Version imprimable
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.
tu veux dire l'adresse du pointeur?
Bonjour,
de mémoire :
On a ainsi la valeur du pointeur et donc l'adresse mémoire de la variable.Code:
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:
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 entierCode:
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:
1
2
3
4 var S : string; begin S := IntToStr(integer(ptr)); end;
autre solution :
Code: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:
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:
1
2
3 SAddress := ToHex(ptr, 4); SContent := ToHex(ptr^, PtrSize);