Delphi 7和Delphi XE4中字符串[80]和字符串之间的差异

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个字符(取决于#),编码不确定(即由您决定)

我正在将Delphi7应用程序迁移到delphi XE4。在Delphi 7中,一些变量声明如下:

var abc : string[80];
在迁移此代码时,我将上述代码声明更改为

var abc : string;
根据我的理解,字符串[80]是ansistring,字符串是unicode。那么,这样做对吗

我正在跟踪stackoverflow的以下链接:


事实上,你是对的:

  • string[#]
    ShortString
    的子类型
    它最多有255个字符(取决于#),编码不确定(即由您决定)
  • string
    是一个常规字符串,在Delphi 2007之前是单字节(现在称为
    ansisting
    ),而在Delphi 2009之前是多字节(现在称为
    UnicodeString
    ) 在Delphi 2007之前,编码尚未确定。从Delphi 2009开始,
    ansisting
    UnicodeString
    都可以进行编码
更多背景信息可在以下两个Delphi文档主题中找到:

回答您关于如何替换
短字符串的问题:

这完全取决于您在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可以。因此,主要标准是数据使用。