如何将TBytes转换为RawByteString?

时间:2009-04-21 15:47:53

标签: delphi string delphi-2009

在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;

4 个答案:

答案 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;