加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

arrays – Delphi – Byte数组到字符串

发布时间:2020-12-15 09:33:58 所属栏目:大数据 来源:网络整理
导读:在我的Delphi VCL表单应用程序中,我有一个具有TBuff参数的程序(在字节数组之前定义).在此过程中,我必须将参数转换为字符串. procedure Form1.Convert(Collect: TBuff);var str: String;begin str := SysUtils.StringOf(Collect);end; 编译之后,我被警告存在
在我的Delphi VCL表单应用程序中,我有一个具有TBuff参数的程序(在字节数组之前定义).在此过程中,我必须将参数转换为字符串.

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

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

Incompatible types :’System.TArray<System.TByte>’ and ‘TBuff’

解决方法

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

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编码的,因此后一个示例是您所需要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读