Delphi 7和Delphi XE4中字符串[80]和字符串之间的差异
我正在将Delphi7应用程序迁移到delphi XE4。在Delphi 7中,一些变量声明如下:Delphi 7和Delphi XE4中字符串[80]和字符串之间的差异,delphi,delphi-7,delphi-xe4,Delphi,Delphi 7,Delphi Xe4,我正在将Delphi7应用程序迁移到delphi XE4。在Delphi 7中,一些变量声明如下: var abc : string[80]; 在迁移此代码时,我将上述代码声明更改为 var abc : string; 根据我的理解,字符串[80]是ansistring,字符串是unicode。那么,这样做对吗 我正在跟踪stackoverflow的以下链接: 事实上,你是对的: string[#]是ShortString的子类型 它最多有255个字符(取决于#),编码不确定(即由您决定)
var abc : string[80];
在迁移此代码时,我将上述代码声明更改为
var abc : string;
根据我的理解,字符串[80]是ansistring,字符串是unicode。那么,这样做对吗
我正在跟踪stackoverflow的以下链接:
事实上,你是对的:
是string[#]
的子类型ShortString
它最多有255个字符(取决于#),编码不确定(即由您决定)
是一个常规字符串,在Delphi 2007之前是单字节(现在称为string
),而在Delphi 2009之前是多字节(现在称为ansisting
) 在Delphi 2007之前,编码尚未确定。从Delphi 2009开始,UnicodeString
和ansisting
都可以进行编码UnicodeString
短字符串的问题:
这完全取决于您在Delphi7中如何使用ShortString
。根据使用情况,有多种方法:
string
字节数组
AnsiString
这完全取决于您存储的数据类型,因此这是您首先需要了解的内容。事实上,您是正确的:
string[#]
是ShortString
的子类型
它最多有255个字符(取决于#),编码不确定(即由您决定)
string
是一个常规字符串,在Delphi 2007之前是单字节(现在称为ansisting
),而在Delphi 2009之前是多字节(现在称为UnicodeString
)
在Delphi 2007之前,编码尚未确定。从Delphi 2009开始,ansisting
和UnicodeString
都可以进行编码
更多背景信息可在以下两个Delphi文档主题中找到:
回答您关于如何替换短字符串的问题:
这完全取决于您在Delphi7中如何使用ShortString
。根据使用情况,有多种方法:
string
字节数组
AnsiString
这一切都取决于您存储的数据类型,因此这是您首先需要了解的。是的,这是正确的。固定长度字符串是一种单字节字符类型。我想说,对于您的应用程序,最好是所有字符串都采用Unicode格式,而不是ANSI格式,因此如果我是您,我会使用字符的数组[0..79]
,或者只使用字符串
@TLama-感谢您消除了我的疑虑。还有一个问题与此相关。Shortstring也用于delphi 7中的许多代码中。我应该在DelphiXe4中用字符串替换这些声明吗?其他一些参考:通常应该使用字符串。但是你没有告诉我们为什么旧代码使用短字符串。自从Delphi 2以来,情况一直很糟糕。代码如何处理这些变量?如果没有完整的图片,我们怎么能给出合理的建议。@DavidHeffernan-这些变量根据数据库列的长度具有固定的长度。我想保持字符串的长度,但要使用unicode。是的,这是正确的。固定长度字符串是一种单字节字符类型。我想说,对于您的应用程序,最好是所有字符串都采用Unicode格式,而不是ANSI格式,因此如果我是您,我会使用字符的数组[0..79]
,或者只使用字符串
@TLama-感谢您消除了我的疑虑。还有一个问题与此相关。Shortstring也用于delphi 7中的许多代码中。我应该在DelphiXe4中用字符串替换这些声明吗?其他一些参考:通常应该使用字符串。但是你没有告诉我们为什么旧代码使用短字符串。自从Delphi 2以来,情况一直很糟糕。代码如何处理这些变量?如果没有完整的图片,我们怎么能给出合理的建议。@DavidHeffernan-这些变量根据数据库列的长度具有固定的长度。我想保持字符串的长度,但是用unicode的方式。不完全正确。字符串[17]的大小只有18个字节,不能容纳超过17个AnsiChars和一个长度字节。Shortstring实际上与string[255]相同。否则+1。还有一个关键的区别没有提到:ShortString是一种值类型,而String是一种引用类型->如果没有额外的序列化/反序列化,您不能将String类型用作持久数据的一部分,但ShortString可以。因此,主要的标准是数据的使用。这并不完全正确。字符串[17]的大小只有18个字节,不能容纳超过17个AnsiChars和一个长度字节。Shortstring实际上与string[255]相同。否则+1。还有一个关键的区别没有提到:ShortString是一种值类型,而String是一种引用类型->如果没有额外的序列化/反序列化,您不能将String类型用作持久数据的一部分,但ShortString可以。因此,主要标准是数据使用。