在Delphi 2009中将声明为TBytes的字节数组转换为RawByteString的最佳方法是什么?这段代码实际上有效,也许有更快的方法(没有循环):
function Convert(Bytes: TBytes): RawByteString;
var
I: Integer;
begin
SetLength(Result, Length(Bytes));
for I := 0 to ABytes - 1 do
Result[I + 1] := AnsiChar(Bytes[I]);
end;
答案 0 :(得分:11)
最好的方法是:
function Convert(const Bytes: TBytes): RawByteString; inline;
begin
SetString(Result, PAnsiChar(pointer(Bytes)), length(Bytes));
end;
并且不要忘记使用const作为字节参数,以便更快地生成代码。
答案 1 :(得分:6)
您可以考虑使用move(未经测试)
function Convert(const Bytes: TBytes): RawByteString;
begin
SetLength(Result, Length(Bytes));
Move(Bytes[0], Result[1], Length(Bytes))
end;
并使用“const”作为参数,因此数组不会被复制两次。
答案 2 :(得分:6)
记住测试:
IF长度(字节)> 0然后移动.....
答案 3 :(得分:5)
不要忘记为RawByteString数据分配代码页,以便在将字符数据分配给任何其他字符串类型时正确转换字符数据:
function Convert(const Bytes: TBytes): RawByteString;
begin
SetLength(Result, Length(Bytes));
if Length(Bytes) > 0 then
begin
Move(Bytes[0], Result[1], Length(Bytes));
SetCodePage(Result, ..., False);
end;
end;