Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi string in array of char umwandeln (https://www.delphipraxis.net/25294-string-array-char-umwandeln.html)

MrKnogge 4. Jul 2004 22:09

Re: string in array of char umwandeln
 
Servus !

vorweg, der variablenname "Name" ist schonmal unglücklich gewählt, da er von jedem objekt benutzt wird. Dann:
Delphi-Quellcode:
setlength(name, length(msg.username));
wozu ?

Das könntest du auch weglassen, und dann in der Schleife mit:
Delphi-Quellcode:
for i := 1 to Length(msg.username) do
    myname := myname + msg.username[i-1];
hintendrann hängen.

Aenogym 4. Jul 2004 22:36

Re: string in array of char umwandeln
 
okay danke.

fast so hatte ich das ja schon. die möglichkeit von christian seehase klappt nicht (meldung: "invalid pointer operation"...).
langsam glaube ich aber auch, dass mein record nicht richtig ankommt.

versand vom server:
Delphi-Quellcode:
type TChatMessage = record
    command: integer;
    userid: integer;
    username: array of char;
    parameters: array of char;
  end;

//...

var rec: TChatMessage;
  serversocket1.Socket.Connections[0].SendBuf(rec, sizeof(rec));
empfang beim client (in dem TClientSocket.OnRead-Event):
Delphi-Quellcode:
socket.receiveBuf(rec, sizeof(rec)
sollte doch klappen, oder?

Aenogym

MrKnogge 5. Jul 2004 10:24

Re: string in array of char umwandeln
 
Ich fürchte nicht, SizeOf hat probleme mit dynamischen Arrays.
(ob auch mit statischen, kann ich nicht sagen)

Tipp:
Schreibe command, userid, Length(Username), Length(parameters), sowie die beiden Arrays in ein MemoryStream und versende dann den.

Chewie 5. Jul 2004 10:26

Re: string in array of char umwandeln
 
Zitat:

Zitat von MrKnogge
Ich fürchte nicht, SizeOf hat probleme mit dynamischen Arrays.

Wieso denn das? Sizeof funktioniert wunderbar mit dynamischen Arrays, man muss als Programmierer nur wissen, dass eine dynamische Array-Variable nichts weiter als ein zeiger auf den Speicherbereich des Arrays ist und dementsprechend 4 Bytes groß. Um die Größe, die ein dynamisches Array belegt herauszufinden, reicht (bei eindimensionalen Arrays) ein Length(DynArray) * Sizeof(DynArray[0]).

choose 5. Jul 2004 10:33

Re: string in array of char umwandeln
 
Hallo Aenogym,

aus Deinem Code lese ich, dass Du einen Record über Sockets an einen anderen Prozess (oder gar Rechner) übertragen möchtest. Bitte lies Dir den Hinweis von Chewie genau durch!

Solltest Du das Record auf diese Weise übertragen, wird lediglich ein Verweis auf die tatsächlichen Daten (und indirekt auf die von Chewie dargestellten Metadaten) im Speicherraum des Absenderprozesses übertragen, nicht aber die Daten selbst!

Das Problem, dass Dich beschäftig heißt Serialisierung und ist hier (auch im Zusammenhang mit Records) schon mehrfach diskutiert worden.

Aenogym 5. Jul 2004 14:18

Re: string in array of char umwandeln
 
danke leute.
dass das thema hier schon öfter diskutiert wurde, hab ich in der suche gesehen...
ich werde denn mal die möglichkeit mit dem memoryStream ausprobieren (obwohl ich eigentlich noch nie mit streams gearbeitet hab - schon garnicht mit memorystreams...).

aber danke euch allen, ich schaff das schon irgendwie :thuimb:

Aenogym


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr.
Seite 2 von 2     12   

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