neee, 'ne einfache Lösung gibt's nicht wirklich ...
theoretisch könnte man es via MultiByteToWideChar und der passenden CodePage machen, aber leider nur theoretisch, denn praktisch geht's nicht
Zitat von
himitsu:
Unicode (ISO-10646-UCS-2) > CodePage: 1200
Unicode - Big Endian > CodePage: 1201
also bleibt nur der Weg des selbermachens, aber da ist es etwas unoptimal, wenn da auf jedes Zeichen direkt über den String zugegriffen würde, da Delphi dort dank der Compilermagic dort jedes Mal Einiges an Verwaltungskram einbaut...
Delphi-Quellcode:
function SwapString(const S: WideString): WideString;
var P, P2: PByte;
i: Integer;
begin
SetLength(Result, Length(S));
P := Pointer(PWideChar(S));
P2 := Pointer(PWideChar(Result));
For i := Length(Result) - 1 downto 0 do Begin
P[1] := P[0];
P[0] := P[1];
Inc(P, 2);
Inc(P2, 2);
End;
end;
weiß jetzt nicht ob das Pointer(...) unbedingt nötig ist ... ist es ja eigentlich nicht, also falls Delphi nicht meckert, dann einfach weglassen (bei Verwendung von P
AnsiChar und C:AnsiChar würde Delphi zumindestens rumnörkeln)
oder direkt im String:
Delphi-Quellcode:
procedure SwapString(var S: WideString);
var P: PByte;
C: Byte;
i: Integer;
begin
// UniqueString(S); // reinmachen, falls UnicodeString, anstatt WideString genutzt werden soll
P := Pointer(PWideChar(S));
For i := Length(S) - 1 downto 0 do Begin
C := P[0];
P[0] := P[1];
P[1] := C;
Inc(P, 2);
End;
end;