【发布时间】:2018-06-28 10:09:08
【问题描述】:
我有一个AnsiString,我需要以最有效的方式将其转换为TBytes。我该怎么做?
【问题讨论】:
标签: delphi data-conversion ansistring
我有一个AnsiString,我需要以最有效的方式将其转换为TBytes。我该怎么做?
【问题讨论】:
标签: delphi data-conversion ansistring
函数BytesOf 将 AnsiString 转换为 TBytes。
var
A: AnsiString;
B: TBytes;
begin
A := 'Test';
B := BytesOf(A);
// convert it back
SetString(A, PAnsiChar(B), Length(B));
end;
【讨论】:
BytesOf() 会崩溃,因为它在索引字节和字符串之前不会检查Length=0。使用 SetLength()+Move() 和 Pointer 像 David 展示的类型转换不会遇到这个问题。另请注意,换一种方式,使用 SetString() 比使用 SetLength()+Move() 更简单:SetString(ansiStr, PAnsiChar(bytes), Length(bytes));
假设您想保留相同的编码,您可以这样做
SetLength(bytes, Length(ansiStr));
Move(Pointer(ansiStr)^, Pointer(bytes)^, Length(ansiStr));
反过来
SetLength(ansiStr, Length(bytes));
Move(Pointer(bytes)^, Pointer(ansiStr)^, Length(bytes));
【讨论】: