Danke für den Hinweis.
Delphi hat keine Probleme mit Strings und #0. Man hat lediglich Probleme wenn man einen solchen String ausgeben möchte. Er wirkt wie abgeschnitten, was er aber nicht ist.
Folgendes Funktioniert nun:
Delphi-Quellcode:
function WideStringToString_Lossyless(UnicodeStr: WideString): string;
var
ByteArray: Array of Char;
begin
SetLength(ByteArray, Length(UnicodeStr));
CopyMemory(@ByteArray[0], @UnicodeStr[1], Length(UnicodeStr));
result := string(ByteArray);
end;
Jetzt bin ich nur noch am rumprobieren mit der Reverse-Funktion:
Delphi-Quellcode:
function DoubleStringToWideString(DoubleString: WideString): widestring;
var
ByteArray:
Array of WideChar;
begin
SetLength(ByteArray, Length(DoubleString)
div 2);
CopyMemory(@DoubleString[1], @ByteArray[0], Length(ByteArray));
result := widestring(ByteArray);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Sollte exakt ANSI "test" sein
showmessage(DoubleStringToWideString(WideStringToString_Lossyless('
test')));
end;
Diese funktioniert aber nicht ganz...