Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

Aenogym 4. Jul 2004 12:04


string in array of char umwandeln
 
hi,

ich habe ein problem. ich möchte einen string in einen array of char umwandeln. das war meine idee:

Delphi-Quellcode:
var msg: string;
    new_msg: array of char;
    i: integer;
begin
  setlength(new_msg, length(msg));
  for i := 0 to high(new_msg) do
  begin
    new_msg[i] := msg[i+1];
  end;
end;
der compiler meckert nicht. aber während der laufzeit crasht mein programm bei der zeile "new_msg[i] := msg[i+1];".

habt ihr eine funktionierende möglichkeit, einen string in einen array of char und auch wieder zurück umzuwandeln?

danke,
Aenogym

alcaeus 4. Jul 2004 12:06

Re: string in array of char umwandeln
 
Probiers mal so:
Delphi-Quellcode:
var msg: string;
    new_msg: array of char;
    i: integer;
begin
  setlength(new_msg, length(msg));
  for i := 1 to Length(msg) do
  begin
    new_msg[i-1] := msg[i];
  end;
end;
Vielleicht funktioniert das jetzt...

Greetz
alcaeus

Aenogym 4. Jul 2004 12:18

Re: string in array of char umwandeln
 
tja und wie geht das andersrum?
ich kanns nur testen, wenn ich das ganze auch wieder zurück in einen string konvertieren kann. ich will nämlich den array of char durchs internet schicken und der client soll ihn dann empfangen.

also beim server hab ich das jetzt so angepasst. hab auch versucht, das ganze "umzudrehen" und dann beim client einzufügen aber da gibts dann wieder ne exception.

Aenogym

Ratte 4. Jul 2004 12:34

Re: string in array of char umwandeln
 
Probier mal
Delphi-Quellcode:
var msg: string;
    new_msg: array of char;
    i: integer;
begin
  setlength(new_msg, length(msg)-1);
  for i := 1 to length(msg) do
  begin
    new_msg[i-1] := msg[i];
  end;
end;
Ratte

alcaeus 4. Jul 2004 12:37

Re: string in array of char umwandeln
 
@Ratte: Willkommen zur Zugriffsverletzung bei der letzten Schreiboperation. Length gibt dir nämlich Ord(msg[0]) zurück, und das ist zufällig die Anzahl Zeichen im String. Das -1 im SetLength musst du also weglassen.

Das Zurückumwandeln funktioniert jetzt ganz einfach:
Delphi-Quellcode:
var msg: string;
    new_msg: array of char;
    i: integer;
begin
  setlength(msg, length(new_msg));
  for i := 1 to Length(new_msg) do
  begin
    msg[i] := new_msg[i-1];
  end;
end;
Greetz
alcaeus

gekmihesg 4. Jul 2004 12:40

Re: string in array of char umwandeln
 
ging das nicht ungefähr so:

array_of_char:=PChar(string);

Christian Seehase 4. Jul 2004 13:23

Re: string in array of char umwandeln
 
Moin Zusammen,

es ginge auch noch so:

Delphi-Quellcode:
var
  msg    : string;
  new_msg : array of char;

begin
  msg := 'Meldung';
  setlength(new_msg,length(msg));
  StrLCopy(@new_msg[0],@msg[1],length(new_msg));
end;
@alcaeus
ord(msg[0]) wäre es bei einem ShortString (wobei hier length(msg) genausogut ginge).
Der Typ string ist eigentlich ein Pointer auf den Inhalt des Strings.
Auf der Adresse -4 beginnt der Zähler, auf Adresse -8 ein Referenzzähler.

Delphi-Quellcode:
var
  msg    : string;
  pLength : PDWORD;

begin
  msg := 'Meldung';
  pLength := PDWORD(msg);
  dec(pLength);
  ShowMessage(IntToStr(pLength^));
end;

Ratte 4. Jul 2004 13:42

Re: string in array of char umwandeln
 
@alcaeus: Also bei mir funzt's fehlerlos...

Ratte

Aenogym 4. Jul 2004 18:49

Re: string in array of char umwandeln
 
WOW, danke, dass sich soviele leute diesem thema annehmen ;)
ich werd's denn mal versuchen.

Aenogym

Aenogym 4. Jul 2004 22:01

Re: string in array of char umwandeln
 
hi nochmal,

also ich habs jetzt getestet und es klappt irgendwie nicht. das umwandeln von string in array klappt (array inspected - einzelne chars sind drin). dann wird mein record (in dem dieses array drinsteckt) über den serversocket versendet und kommt auch beim client an.

jetzt will ich es weiterverarbeiten, hänge aber wieder an einer exception:

Delphi-Quellcode:
var name: string;
    msg.username: array of char;

  setlength(name, length(msg.username)); //<== hier exception
  for i := 1 to Length(msg.username) do
  begin
    name[i] := msg.username[i-1];
  end;
falls es weiterhilft, hier mal die meldung:
Code:
---------------------------
Debugger Exception Notification
---------------------------
Project iceChat.exe raised exception class EAccessViolation with message 'Access violation at address 004059BC in module 'iceChat.exe'. Read of address 008D2688'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help  
---------------------------
ich kann auch noch mehr code zeigen, nur will diesen post jetzt nicht so füllen ;)
aber ist der code fürs zurückwandeln vielleicht doch fehlerhaft oder mache ich was falsch?

edit: ich versuche einfach mal die möglichkeit von christian seehase.

thx,
Aenogym


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.
Seite 1 von 2  1 2      

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