ascii 表的前 32 个字符有什么作用?

Bar*_*den 6 ascii control-characters

ASCII 表的前 32 个字符 (0x00 - 0x1F) 都是不可打印的字符(表末尾的“DEL”除外)。

除了在 cat 二进制文件时使终端停止工作之外,这些还有什么用?

其中一些是显而易见的:

   Oct   Dec   Hex   Char
   ----------------------------------------------
   000   0     00    NUL '\0'                    

   007   7     07    BEL '\a' (bell)             
   010   8     08    BS  '\b' (backspace)        
   011   9     09    HT  '\t' (horizontal tab)   
   012   10    0A    LF  '\n' (new line)         
   013   11    0B    VT  '\v' (vertical tab)     
   014   12    0C    FF  '\f' (form feed)        
   015   13    0D    CR  '\r' (carriage ret)     

   033   27    1B    ESC (escape)                
Run Code Online (Sandbox Code Playgroud)

其他的,比如

   020   16    10    DLE (data link escape)
   021   17    11    DC1 (device control 1)
   022   18    12    DC2 (device control 2)
   023   19    13    DC3 (device control 3)
   024   20    14    DC4 (device control 4)
Run Code Online (Sandbox Code Playgroud)

没见过用过。

ACK、NAK 和 SYN 是用于 TCP 中的三路握手的相同字节,还是只是类似?

编辑:请参阅 Eric Raymond 的《每个黑客都知道事情》

如果你是在 1990 年左右之后学会的,那么神秘的部分可能是控制字符,代码点 0-31。您可能知道 C 使用 NUL 作为字符串终止符。其他,特别是 LF = Line Feed 和 HT = Horizo​​ntal Tab,以纯文本形式显示。但是剩下的呢?

其中许多是电传协议的残余,这些协议要么已经死了很长时间,要么仍然存在,在计算界完全不为人知。一些具有传统含义,甚至在互联网时代之前就已被遗忘了一半。今天,只有极少数仍在二进制数据协议中使用。

Law*_*ceC 6

这些称为控制代码,旨在告诉实际终端您要执行某些操作,而不是通过以显示某些内容。其中一些,例如 BEL (0x07),可以追溯到终端是真正的电传打字机时(在这种情况下,0x07 会在电传打字机中响起物理钟)。

DLE 旨在像 ESC 一样工作 - 一旦终端接收到它,进一步传入的字符将成为与终端的命令或其他通信,而不是输出到实际设备本身。虽然我从未亲眼见过它的实际使用。

ACK、NAK 和 SYN(以及许多其他,如 SOH 标头开头、STX 文本开头、ETX 文本结尾)可用于实现协议,但在设计时并未考虑 TCP/IP。TCP/IP 通过在报头中设置位来指示,而不是通过传输整个 ASCII 代码。如果执行诸如通过 56k 调制解调器传输文件之类的操作,这些可能很有用。我知道像 ZModem 这样的串行/调制解调器协议使用了其中的几个,而且我确信还有其他基于串行/56k 调制解调器的协议可以使用。

这张图表比我更了解它们,包括 DC1、DC2、DC3 和 DC4 代码的含义。


Mok*_*bai 5

过去,他们有大型计算机来进行批量处理,还有简单的“终端”机器来显示数据。

这些终端通过串行数据线连接,这意味着需要某种命令集,以便双方可以在准备好接收数据、准备发送等时发出信号。ASCII 字符集基本上列出了所有可用的命令和字符并对它们进行标准化。

您从未见过使用过的信号可能只在非常特定的终端上看到,虽然 ACK、SYN 和 NAK 与 TCP 对应信号类似,但它们并不直接相关。