AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer to String; String to Pointer

Offene Frage von "Rakogan"
Ein Thema von Rakogan · begonnen am 29. Apr 2009 · letzter Beitrag vom 29. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2      
Rakogan

Registriert seit: 29. Apr 2009
10 Beiträge
 
#1

Pointer to String; String to Pointer

  Alt 29. Apr 2009, 13:51
Hi,
ist es möglich einen Pointer als String zu Speichern und andersherum einen String wieder zu einem Pointer zu "machen"?
Generell ist ein Pointer ja nur ein Zeiger der auf etwas Zeigt, was meiner meinung nach die Sache erschwert, da man einen String nicht einfach mit so zuweisen kann:
Delphi-Quellcode:
var
  s:String;
  p:pointer;
begin
  p:=pointer(s);
end;
Dadurch würde ja der Pointer auf den String zeigen und nicht auf den Pointer der als String gespeichert ist.

Rakogan
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 13:53
Das Stichwort ist Delphi-Referenz durchsuchenPChar.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 13:53
Delphi-Quellcode:
var
  s:String;
  p:pointer;
begin
  p := @s[1];
  // oder
  p := PChar(s);
  // zurück mit
  s := PChar(p);
end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 13:55
hallo ersmal

der offizielle Weg wäre
P := PChar(S);
aber es kommt drauf an, was du vor hast ... soll der Pointer auf den String zeigen
oder soll hinter dem Pointer eine eigene Kopie des Strings liegen
und wenn Letzeres, worüber willst du den Speicher für die Stringdaten im Pointer reservieren?

[edit]
@satty1:
p := @s[1]; aber paß auf ... wenn der String leer ist, dann knallt es hier gewaltig, da es kein Zeichen am Index 1 gibt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 14:01
Hallo

ich interpretiere die Frage so, daß Rakogan gerne den "wert" eines Pointers ausgeben will, etwa so:
Zeiger auf wertx: 0x012DA4E34

das liefe dann auf InttoHex oder InttoStr hinaus.

Gruß
K-H
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 14:08
Zitat von himitsu:
p := @s[1];
Ja, sorry... schneller getippt als nachgedacht
Zitat:
aber paß auf ... wenn der String leer ist, dann knallt es hier gewaltig, da es kein Zeichen am Index 1 gibt
Garnicht wahr, erst bei p := @s[2]; zwei #0 auch bei leeren Strings oder Speicherausrichtung schützt mich da irgendwie Nicht nachmachen!

Aber ist trotzdem falsch und PChar sowieso der richtigere Cast.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#7

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 14:11
Zitat:
Delphi-Quellcode:
P := PChar(S);
// zurück mit
S := PChar(P);
wobei hier P:=PChar(s); das P nur auf den Anfang von S zeigt
und wenn man S mal ändert, dann könnte P auch mal schnell ins (n)Irgendwo hinzeigen

hier S:=PChar(P); wird aber der Text, auf welchen P zeigt kopiert und die Kopie in S abgespeichert.


wenn zu z.B. eine eigene Kopie in P anlegen willst ... wobei es da auch noch viele andere Wege gibt, welche teilweise sogar noch direkt auf Strings/Texte ausgelegt sind (die fallen mir aber grad nicht ein, da ich sie nicht nutze)
Delphi-Quellcode:
P := GetMem(Length(S) + 1);
MoveMemory(P, PChar(S), Length(S) + 1);

// und wenn man den Speicher/Text von P nicht mehr braucht,
// dann muß man den natürlich wieder freigeben
FreeMem(P);
Zitat:
Garnicht wahr, erst bei p := @s[3];
ich hoffe der Threadersteller und alle Anderen lesen hier die Ironi raus
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rakogan

Registriert seit: 29. Apr 2009
10 Beiträge
 
#8

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 15:27
Danke für die ganzen Hilfen
ich hab es jetzt ganz simpel gelöst^^
Pointer auslesen:
Delphi-Quellcode:
var
  s:String;
  p:pointer;
begin
  s:=inttostr(integer(p));
end;
Pointer zuweisen:
Delphi-Quellcode:
var
  s:String;
  p:pointer;
begin
  p:=pointer(strtoint(s));
end;
Für Kommentare und Anregungen dazu bin ich immer offen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#9

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 15:37
also so wandelst du nur den Pointer selber in einen String(bzw. den binären Zeigerwet in einen dezumalen String)


was willst du denn nun erreichen/machen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Pointer to String; String to Pointer

  Alt 29. Apr 2009, 16:29
ich glaube p80286 hatte recht...

***

dann, weil es mich interessiert hat:
Delphi-Quellcode:
S := '';

P := PChar(S);
//mov eax,[ebp-$04]
//call @LStrToPChar

P := @S[1];
//lea eax,[ebp-$04]
//call UniqueString
Deshalb gibt es auch bei leerem String wohl keine AV.
Trotzdem, auf @S[1] zugreifen ohne eine Gültigkeitsprüfung ist schlechter Code und soll nicht zur Nachahmung dienen. Ich wollte nur wissen, warum es ging!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz