Einzelnen Beitrag anzeigen

DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#1

Unicodestring in stream speichern

  Alt 18. Aug 2011, 12:44
Hi,

ich habe mir einige der Diskussionen über das Speichern von String (Unicode) durchgelesen und selbst experimentiert

Delphi-Quellcode:
var astring:unicodestring;
    s:tstream;
    i:integer;

speichern
i:=length(astring);
s.write(i,sizeof(i));
s.write(pointer(astring)^,i);


lesen
s.Read(i,sizeof(i));
SetLength(astring,i);
s.Read(pointer(f_string)^,i);
das funktioniert sogar!

wiederspricht folgendem Fakt: "Bei Unicode-Strings (WideString) gibt Length die Byte-Anzahl geteilt durch zwei zurück" (delphi-Hilfe)

also, wie in einigen Beiträgen empfohlen:

Delphi-Quellcode:
var astring:unicodestring;
    s:tstream;
    i:integer;

speichern
i:=length(astring)*2 ;//*sizeof(char)
s.write(i,sizeof(i));
s.write(pointer(astring)^,i);


lesen
s.Read(i,sizeof(i));
SetLength(astring,i div 2);
s.Read(pointer(f_string)^,i);
das funktioniert auch - nur das die doppelte Menge bytes gespeichert werden - oder wo ist der Denkfehler?

Beide Methoden funktionieren!

MfG
Uwe
  Mit Zitat antworten Zitat