在我的Delphi VCL表单应用程序中,我有一个程序,它有一个TBuff参数(之前定义为字节数组)。在此过程中,我必须将参数转换为字符串。
procedure Form1.Convert(Collect: TBuff);
var
str: String;
begin
str := SysUtils.StringOf(Collect);
end;
编译之后,我被警告存在这个编译器错误:
不兼容的类型:'System.TArray< System.TByte>'和'TBuff'
答案 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编码的,所以后面的例子就是你需要的。