Ansichar和char有什么区别?

时间:2014-10-20 18:16:22

标签: delphi variables types char widechar

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

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

1 个答案:

答案 0 :(得分:5)

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

这符合以下事实: String 类型实际上是 ANSIString 的同义词。

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

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

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

var
  ach: ANSIChar;
  ch: Char;         // Synonymous with ANSIChar

然而,在Delphi 2009及更高版本中,“ch”声明的含义发生了变化:

var
  ach: ANSIChar;
  ch: Char;         // Synonymous with WIDEChar

因此, ach ch 变量不再是兼容类型。

即。您收到此错误的原因是您有一些已使用 ANSIChar 类型声明的代码以及使用声明为 Char 类型的值的其他代码。当使用旧版本的Delphi编译 Char = ANSIChar 时,这两组代码是兼容的,但在Delphi 2009及更高版本中 Char = WideChar 等两种类型( 字符 ANSIChar 兼容。