Jak zamienić w Delphi takiego stringa:
6F2345C
na adres pamięci:
$6F2345C
Jak zamienić w Delphi takiego stringa:
6F2345C
na adres pamięci:
$6F2345C
Dopisz $
przed nazwą?
Jak mniemam jednak po prostu bardzo źle opisujesz problemy i sytuacja wygląda tak, iż masz pewną zmienną str: string
, w której znajduje się pewna liczba heksydecymalna (str := '6F2345C'
) i chcesz tę liczbę zamienić na "adres pamięci". Teraz tylko pozostało wytłumaczyć nam, co to jest Twoim zdaniem "adres pamięci".
Spróbuj coś takiego:
uses
SysUtils;
var
ptrFoo: Pointer;
begin
ptrFoo := Pointer(StrToInt('0x6F2345C')); // lub StrToInt('$6F2345C')
Jeśli chcesz otrzymać coś innego to dokładnie opisz problem, bo powyższe to strzał na ślepo;
Edit: Może podam nieco dłuższy kod, który obrazuje prawdziwość działania takich zabiegów; Poniżej przykład pozyskania adresu znaku ze zmiennej, następnie pozyskanie adresu ze wskaźnika, jego konwersja na łańcuch znaków heksadecymalnych, następnie dekonwersja tego ciągu na liczbę (adres) i na końcu wyświetlenie znaku spod pozyskanego adresu:
uses
SysUtils;
var
strValue: String = 'ABCDEFGH';
ptrChar: Pointer;
intAddr: PtrInt;
strAddr: String;
begin
// pobranie adresu na znak 'F' z łańcucha
ptrChar := @strValue[6];
// wyświetlenie znaku spod wskaźnika i adresu na który wskazuje
WriteLn('Value: ':20, PChar(ptrChar)^);
// wyświetlenie adresu po konwersji adresu na hex-string
WriteLn('Address (hexint): ':20, HexStr(PtrInt(ptrChar), 8));
// konwersja adresu na hex-string i wpisanie go do zmiennej
strAddr := HexStr(PtrInt(ptrChar), 8);
// wyświetlenie adresu jako ciągu znaków ze zmiennej
WriteLn('Address (string): ':20, strAddr);
// dekonwersja hex-stringa na adres w pamięci
ptrChar := Pointer(StrToInt('0x' + strAddr)); // lub StrToInt('$' + strAddr)
// wyświetlenie znaku spod nowego wskaźnika
WriteLn('Value: ':20, PChar(ptrChar)^);
end.
Na wyjściu znajdzie się poniższy tekst:
Value: F
Address (hexint): 00415011
Address (string): 00415011
Value: F
Przed zabawą z adresami i konwersjami, wskaźnik ptrChar
wskazywał na znak F
ze zmiennej; Po całej zabawie nadal na niego wskazuje, więc otrzymanie adresu z ciągu znaków działa prawidłowo; Kod testowany pod FPC, jednak Delphi również powino przetrawić ten kod bez większych problemów;
Pozostaje jeszcze kwestia ewentualnych hintów, dotyczących "nieprzenośności konwersji liczb i pointerów", ale to szczegół i jedynie informacja, aby wszystko było jasne; Zresztą nie wiem do czego ma to służyć, więc podaję ogólny przykład.