gpt4 book ai didi

Delphi 字符串/字符串数组

转载 作者:行者123 更新时间:2023-12-02 08:26:49 26 4
gpt4 key购买 nike

我有一个旧程序,是用 Delphi 1(或 2,我不确定)编写的,我想构建它的 64 位版本(我使用 Delphi XE2)。现在的问题是,在源代码中,一方面有字符串,另一方面有字符串数组(我想限制字符串长度)。现在由于类型不兼容,编译时出现很多错误。最重要的是,有一些程序应该处理这两种类型。有没有一种简单的方法来解决这个问题(无需更改每个变量)?

最佳答案

简短回答
搜索并替换 : string => : ansistring
确保使用 length(astring)setLength(astring) 而不是操作 string[0]

长答案

Delphi 1 只有一种类型的字符串。
old-skool ShortString 的最大长度为 255 个字符,并且有声明的最大长度。

它看起来和感觉起来都像一个字符数组,但它有一个前导长度字节。

var
ShortString: string[100];

在 Delphi 2 中引入了长字符串(又名 AnsiString),它们取代了短字符串。它们没有固定长度,而是动态分配,并根据需要自动增长和收缩。
它们是自动创建和销毁的。

var
Longstring: string; //AnsiString, can have any length up to 2GB.

在 Delphi 2009 中引入了 Unicode。
这会改变长字符串,因为现在每个 char no langer 占用 1 个字节,但占用 2 个字节(*)。此外,您可以为 AnsiString 指定字符集,而新的 Unicode 长字符串使用 UTF-16。

您需要做什么取决于您的需求:

如果您只想让旧代码像以前一样工作,并且不关心支持 Unicode 支持的所有多语言内容,则需要将所有 string 关键字替换为 AnsiString (适用于所有长字符串)。
如果您有 Delphi 1 代码,则可以将 string 重命名为 ShortString
我建议您重构代码以始终使用长字符串(阅读:AnsiString)。

Delphi 将自动将所有函数返回值(Unicode 字符串)转换为 AnsiStrings 的 UnicodeStrings 转换为 AnsiStrings,反之亦然,但是,如果用户在 AnsiString 无法存储的编辑框中输入符号,则可能会导致数据丢失。
而且所有翻译都需要一些时间(不过我怀疑你会注意到这一点)。

在 Delphi 1 到 Delphi 2007 中不存在此问题,因为控件不允许输入 Unicode 字符。

(*) 过于简单化

关于Delphi 字符串/字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com