/ / Ako previesť reťazce unicode na bajtové pole a naopak na Delphi-2007 - reťazec, delphi, unicode, kódovanie, delphi-2007

Ako prevádzať reťazce unicode na bajty a naopak na Delphi-2007 - reťazec, delphi, unicode, kódovanie, delphi-2007

V Delphi XE7 prevádzame niektoré hodnoty z reťazca na bajty a z bajtov na reťazec pomocou:

MyBytes := TEncoding.Unicode.GetBytes(MyString);

a

MyString := TEncoding.Unicode.GetString(MyBytes);

Chcel by som napísať svoje vlastné funkcie, ktoré majú rovnaké výsledky ako Delphi-2007. Ja naozaj neviem, čo sa týka kódovania znakov, predpokladám, že by som mal používať typ WideString v Delphi-2007 (je to tak?)

function StringToBytes(AValue : WideString) : TBytes;
begin
Result := //...
end;

function BytesToString(AValue : TBytes) : WideString;
begin
Result := //...
end;

Môže mi niekto pomôcť pri písaní týchto dvoch funkcií?

odpovede:

4 pre odpoveď č. 1

Od a WideString je kódovaný UTF-16 a chcete mať bajtové pole kódované UTF-16, nie je potrebná žiadna konverzia. Môžete vykonať priamu kópiu pamäte, ako je táto:

function StringToBytes(const Value : WideString): TBytes;
begin
SetLength(Result, Length(Value)*SizeOf(WideChar));
if Length(Result) > 0 then
Move(Value[1], Result[0], Length(Result));
end;

function BytesToString(const Value: TBytes): WideString;
begin
SetLength(Result, Length(Value) div SizeOf(WideChar));
if Length(Result) > 0 then
Move(Value[0], Result[1], Length(Value));
end;