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

Delphi字符现在以2个字节而不是1个存储在类型化的二进制文件中.

发布时间:2020-12-15 04:18:07 所属栏目:大数据 来源:网络整理
导读:我维护一个Delphi程序,它使用类型化的二进制文件作为其本机文件格式.从Turbo Delphi升级到Delphi 2010后,存储的记录类型中的所有字符开始以2个字节而不是1个字节存储. 存储的数据类型是char的char和array [1..5]. 所以之前,文件的一部分看起来像: 4C 20 20
我维护一个Delphi程序,它使用类型化的二进制文件作为其本机文件格式.从Turbo Delphi升级到Delphi 2010后,存储的记录类型中的所有字符开始以2个字节而不是1个字节存储.

存储的数据类型是char的char和array [1..5].

所以之前,文件的一部分看起来像:

4C 20 20 20 4E 4E 4E 4E

现在它看起来像:

4C 00 20 00 20 00 20 00 4E 00 4E 00 4E 00 4E 00

首先,为什么这首先发生?

其次,我怎么还能读取我的文件,记住现在宇宙中有旧文件和新文件?

我会在午餐后痴迷地监视这个问题.请随时在评论中询问更多信息.

解决方法

这种情况发生在Delphi 2009中将默认字符串类型从AnsiString更改为UnicodeString时.听起来就像是在向文件写入字符串.将它们作为AnsiString重新声明为记录,它应该可以正常工作.

同样适用于char.原始的char是一个AnsiChar,每个字符一个字节.现在默认的char是一个WideChar,它是一个UTF-16字符,每个字符2个字节.将您的char数组重新声明为AnsiChar数组,您将获得旧文件样式.

至于意识到两种风格都存在,这是一团糟.除非在升级Delphi版本时文件中的版本号已被更改,我想您可以做的唯一事情就是在字符数据中扫描00个字节,然后在AnsiChar或WideChar版本中读取它记录是基于它是否找到它.

(编辑:李大同)

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

    推荐文章
      热点阅读