sta*_*ker 5 arrays delphi string byte
在我的Delphi VCL表单应用程序中,我有一个具有TBuff参数的程序(在字节数组之前定义).在此过程中,我必须将参数转换为字符串.
procedure Form1.Convert(Collect: TBuff);
var
str: String;
begin
str := SysUtils.StringOf(Collect);
end;
Run Code Online (Sandbox Code Playgroud)
编译之后,我被警告存在这个编译器错误:
不兼容的类型:'System.TArray <System.TByte>'和'TBuff'
您遇到的问题是您已经定义了自己的字节数组类型,如下所示:
type
TBuff = array of Byte;
Run Code Online (Sandbox Code Playgroud)
您的这种私有类型与其他字节数组类型不兼容.大多数使用字节数组的RTL函数都使用TBytes声明为的RTL类型TArray<Byte>.
您要做的第一件事就是TBuff从您的程序中删除而不是使用TBytes.如果继续使用,TBuff您将发现所有字节数组代码都存在于自己的贫民窟中,无法与使用的库功能进行交互TBytes.所以,逃离贫民区,并TBuff从存在中删除你的类型.
现在,为了将字节数组转换为字符串,您需要提供编码信息来执行此操作.您选择了StringOf哪些应该被视为遗留功能.最好在转换和使用时更明确TEncoding.
例如,如果字节数组是UTF-8,则写入:
str := TEncoding.UTF8.GetString(ByteArray);
Run Code Online (Sandbox Code Playgroud)
如果字节数组是用本地ANSI编码编码的,那么你写:
str := TEncoding.ANSI.GetString(ByteArray);
Run Code Online (Sandbox Code Playgroud)
在您的情况下,使用StringOf表示字节数组是ANSI编码的,因此后一个示例是您需要的.