Zamiana stringa na adres pamięci

0

Jak zamienić w Delphi takiego stringa:

6F2345C

na adres pamięci:

$6F2345C

0

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".

1

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

http://ideone.com/eDtuaG

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1