Ansichar和char有什么区别?

ThN*_*ThN -3 delphi variables types char widechar

我最近遇到了这种数据类型不匹配的问题.这是我以前从未见过的.我希望有人可以解释这些是什么以及它们有何不同.

我得到的错误是F2063.[DCC错误] E2010不兼容类型:'AnsiChar'和'Char'

Del*_*ics 5

从历史上看,在Delphi中,Char类型实际上是ANSIChar类型的同义词.也就是说,一个字节代表ANSI代码页中的字符. 注意: 这是一种简化,忽略了在ANSI字符串中可能遇到的多字节字符引起的复杂性,但足以满足此答案.

这符合String类型实际上是ANSIString的同义词这一事实.

在Delphi 2009之后,这种情况发生了变化.

在Delphi 2009中,StringChar类型分别成为UnicodeString(具有附加功能的WideString)和WideChar的同义词,反映了作为字符串和字符类型的本机格式转换为Unicode.甲WideChar是表示Unicode的一个单个字符(或代理对的一半)2字节值.

因此,在Delphi 2009之前的Delphi版本中,以下两个变量是兼容的类型:

var
  ach: ANSIChar;
  ch: Char;         // Synonymous with ANSIChar
Run Code Online (Sandbox Code Playgroud)

但是,在Delphi 2009及更高版本中,"ch"声明的含义发生了变化:

var
  ach: ANSIChar;
  ch: Char;         // Synonymous with WIDEChar
Run Code Online (Sandbox Code Playgroud)

结果,achch变量不再是兼容类型.

即你得到这个错误的原因是你有一些代码已经使用ANSIChar类型声明,而其他代码使用的是声明类型为Char的值.当使用旧版本的Delphi编译Char = ANSIChar时,两组代码兼容,但在Delphi 2009及更高版本的Char = WideChar中,两种类型(CharANSIChar)兼容.