我有一个AnsiString
,需要以最有效的方式将其转换为 TBytes
。我该如何做?
我有一个AnsiString
,需要以最有效的方式将其转换为 TBytes
。我该如何做?
BytesOf
函数将 AnsiString 转换为 TBytes。
var
A: AnsiString;
B: TBytes;
begin
A := 'Test';
B := BytesOf(A);
// convert it back
SetString(A, PAnsiChar(B), Length(B));
end;
SetLength(bytes, Length(ansiStr));
Move(Pointer(ansiStr)^, Pointer(bytes)^, Length(ansiStr));
SetLength(ansiStr, Length(bytes));
Move(Pointer(bytes)^, Pointer(ansiStr)^, Length(bytes));
BytesOf()
会崩溃,因为它在索引字节和字符串之前没有检查Length=0
。像 David 展示的那样使用SetLength()+Move()
和Pointer
类型转换不会遇到这个问题。还要注意,反过来使用SetString()
比显式使用SetLength()+Move()
更简单:SetString(ansiStr, PAnsiChar(bytes), Length(bytes));
- Remy LebeauSetString()
更好。我已经更新了代码。BytesOf('')
对我来说没有崩溃。我只是运气好吗? - Sebastian Z