Delphi - Byte数组到字符串

时间:2014-02-05 10:10:43

标签: arrays string delphi byte

在我的Delphi VCL表单应用程序中,我有一个程序,它有一个TBuff参数(之前定义为字节数组)。在此过程中,我必须将参数转换为字符串。

procedure Form1.Convert(Collect: TBuff);
var 
   str: String;
begin
   str := SysUtils.StringOf(Collect);
end;

编译之后,我被警告存在这个编译器错误:

  

不兼容的类型:'System.TArray< System.TByte>'和'TBuff'

1 个答案:

答案 0 :(得分:8)

您遇到的问题是您已经定义了自己的字节数组类型:

type
  TBuff = array of Byte;

您的私有类型与其他字节数组类型不兼容。大多数使用字节数组的RTL函数都使用RTL类型TBytes,它被声明为TArray<Byte>

您要做的第一件事就是从您的计划中删除TBuff,而是使用TBytes。如果继续使用TBuff,您会发现所有字节数组代码都存在于自己的贫民窟中,无法与使用TBytes的库功能进行交互。所以,逃离贫民窟,并删除你的TBuff类型。

现在,为了将字节数组转换为字符串,您需要提供编码信息来执行此操作。您选择StringOf这些天应该被视为遗留功能。最好在转换中更明确,并使用TEncoding

例如,如果字节数组是UTF-8,则写入:

str := TEncoding.UTF8.GetString(ByteArray);

如果字节数组以本地ANSI编码编码,则写入:

str := TEncoding.ANSI.GetString(ByteArray);

在你的情况下,使用StringOf表示字节数组是ANSI编码的,所以后面的例子就是你需要的。