字符类型

字符数据类型用于存储构成字符串的特定字符(字母)(参见 字符串)。MQL5 有 4 种字符类型:两个大小为 1 字节的类型(charuchar)和两个大小为 2 字节的类型(shortushort)。以 u 为前缀的类型是无符号的。

事实上,字符类型是整数类型,因为字符类型实际存储的是相关表中字符的整数代码:char 类型对应 ASCII 字符表(代码 0 至 127);uchar 类型对应扩展 ASCII 表(代码 0 至 255);short/ushort 类型对应 Unicode 表(无符号版本最多有 65535 个字符)。顺带说下,ASCII 是美国信息交换标准代码 (American Standard Code for Information Interchange) 的缩写。

对于 MQL5 字符串,使用 2 字节字符 ushort。传输随机数据数组时,通常会使用 1 字节 uchar 类型,这些 数组 会根据所应用的协议进行打包和解包,例如用于连接到加密平台。

字符常量被记录为用单引号括起来的字母。但是,您也可以使用上述整数记数法(参见 整数)。同时,整数必须在 1 字节或 2 字节格式的值范围内。

此外,我们可以使用转义序列表示法。转义序列使用反斜杠 ('\') 作为第一个字符,后跟一个预定义的控制字符和/或数字代码。MQL5 支持以下转义序列:

  • \n – 换行
  • \r – 回车
  • \t – 制表
  • \\ – 反斜杠
  • \" – 双引号
  • \' – 单引号
  • \X 或 \x – 前缀,用于随后指定十六进制格式的数字代码
  • \0 – 前缀,用于随后指定八进制格式的数字代码

MQL5/Scripts/MQL5Book/p2/TypeChar.mq5 脚本中给出了使用字符类型常量的基本方法。

void OnStart()
{
  char a1 = 'a';  // ok, a1 = 97, English letter 'a' code
  char a2 = 97;   // ok, a2 = 'a' as well
  char b = '£';   // warning: truncation of constant value, b = -93
  uchar c = '£';  // ok, c = 163, pound symbol code
  short d = '£';  // ok
  short z = '\0';    // ok, 0
  short t = '\t';    // ok, 9
  short s1 = '\x5c'; // ok, backslash code 92
  short s2 = '\\';   // ok, backslash as is, code 92 as well
  short s3 = '\0134';// ok, backslash code in octal form
}

a1a2 变量以两种不同的方式获得字符 'a'(英文字母)的值。

尝试将 '£' 记录在 b 变量中,但是其代码 163 超出了 char 的范围 (127);因此被转换为有符号数 -93(编译器给出一个警告)。它后面的 uchar(c) 和 short (d) 类型的变量认为这个代码是正常的。

其他变量使用转义序列初始化。

可对字符采取的处理操作与整数相同(参见 表达式)。