这个 Delphi 语法有什么作用?“一些AnsiChar := ^H;”

TBy*_*yte 3 delphi char control-characters

我正在将一个非常旧的组件转换为 Delphi 12,并且偶然发现了我不记得以前见过的语法。代码有点像这样:

someBoolean := key in [^H, #32..#255];
Run Code Online (Sandbox Code Playgroud)

我知道它正在测试key指定的 ANSI 字符集是否匹配或在范围内,但到底是什么^HH如果我更改为A, , BDelphi似乎很乐意编译该行C或 ,1。该行在 Delphi 12 和 Delphi 7 下编译。我似乎找不到任何有关此的信息。这似乎是一个非常古老的语法,可能来自 Pascal 时代。有人能解释一下吗?

我在 Delphi 7 中准备了这个测试代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15: AnsiChar;
begin
  c1 := ^A;
  c2 := ^B;
  c3 := ^C;
  c4 := ^D;
  c5 := ^E;
  c6 := ^F;
  c7 := ^G;
  c8 := ^H;
  c9 := ^Z;
  c10 := ^a;
  c11 := ^b;
  c12 := ^0;
  c13 := ^1;
  c14 := ^2;
  c15 := ^3;
  ShowMessage(
    IntToStr(Byte(c1)) + #13#10 +
    IntToStr(Byte(c2)) + #13#10 +
    IntToStr(Byte(c3)) + #13#10 +
    IntToStr(Byte(c4)) + #13#10 +
    IntToStr(Byte(c5)) + #13#10 +
    IntToStr(Byte(c6)) + #13#10 +
    IntToStr(Byte(c7)) + #13#10 +
    IntToStr(Byte(c8)) + #13#10 +
    IntToStr(Byte(c9)) + #13#10 +
    IntToStr(Byte(c10)) + #13#10 +
    IntToStr(Byte(c11)) + #13#10 +
    IntToStr(Byte(c12)) + #13#10 +
    IntToStr(Byte(c13)) + #13#10 +
    IntToStr(Byte(c14)) + #13#10 +
    IntToStr(Byte(c15)));
end;
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

1
2
3
4
5
6
7
8
26
1
2
112
113
114
115

所以看起来大写的字符对应于它们在字母表中的位置,但我无法告诉其他字符对应的是什么。它们与 ASCII 表中的相应值不匹配。

Ken*_*ite 8

代表^控制键,是旧 Pascal(以及之前的 ANSI 终端)的延续。该键将与 Ctrl+H 匹配,即退格键。本质上,集合 [^H, #32..#255]包括退格键和 #32(空格)以上的任何 ASCII 字符。

ANSI 终端中的其他一些常见转义序列包括:

通用 ASCII 代码,取自Github Gist

姓名 小数 八进制 十六进制 C-逃逸 Ctrl 键 描述
贝尔 7 007 0x07 \A ^G 航站楼铃声
学士 8 010 0x08 \b ^H 退格键
H T 9 011 0x09 \t ^我 水平制表符
如果 10 012 0x0A \n ^J 换行(换行)
室速 11 013 0x0B \v ^K 垂直制表符
FF 12 014 0x0C \F ^L 换页(又作:新页 NP)
CR 13 015 0x0D \r ^M 回车符
ESC键 27 033 0x1B \e* ^[ 转义字符
德尔 127 177 0x7F 删除字符

  • [控制字符](https://en.wikipedia.org/wiki/Control_character) 仍然在 [ASCII](https://en.wikipedia.org/wiki/ASCII#Character_set) 中携带这些名称,因此也在 [ Unicode](https://en.wikipedia.org/wiki/Unicode_control_characters#Control_pictures)。 (2认同)