写了一个,这里的 unicode 的代码页使用系统默认的(就是中文 cp936):
uses Types;
procedure StrToUniByteArray(const S: string; var B: TByteDynArray);
var
strData: string;
nSize: Integer;
begin
nSize := Length(S);
SetLength(strData, 2 * nSize);
nSize := MultiByteToWideChar(0, 0, PChar(S), Length(S), PWideChar(strData), nSize);
SetLength(B, 2 * nSize);
if nSize > 0 then Move(PChar(strData)^, B[0], 2 * nSize);
end;
测试例子:
procedure TForm1.Button3Click(Sender: TObject);
var
S: string;
B: TByteDynArray;
begin
S := '=^0^=';
StrToUniByteArray(S, B);
Caption := IntToStr(B[1]);
end;
你在 xp/2000 中开个记事本,写入 =^0^= 然后保存成 txt(注意,选择编码是 unicode 的),然后使用 winhex 之类的打开这个 txt 可以看到处理 unicode 标识头(FFFE)就是上面代码中 B 的内容。
BTW:
如果是存储、交换信息等,utf-8 是 unicode 最好的解决方法(这个在 java 中很流行)Delphi 内置了对 utf-8 的支持:
function AnsiToUtf8(const S: string): UTF8String;
function Utf8ToAnsi(const S: UTF8String): string;