Function/Control Code/Character in ASCII
【什么是 Function Code 功能码或  Function Character 功能字符】
ASCII 字符集,大家都知道吧,最基本的包含了 128 个字符。其中前 32 个, 0-31 ,即 0x00-0x1F ,都是不可见字符。这些字符,就叫做控制字符。
这些字符没法打印出来,但是每个字符,都对应着一个特殊的控制功能的字符,简称功能字符或功能码 Function Code 。
简言之: ASCII 中前 32 个字符,统称为 Function Code 功能字符。
此外,由于 ASCII 中的 127 对应的是 Delete ,也是不可见的,所以,此处根据笔者的理解,也可以归为 Function Code 。
此类字符,对应不同的“功能”,起到一定的“控制作用”,所以,称为控制字符。
关于每个控制字符的控制功能缩写,参见下表:
表格  1    ASCII 中的控制字符
进制   
十六
进制   
控制
字符   
转义
字符 *   
说明   
Ctrl +
下列字母  *
0   
00   
NUL   
/0   
Null character( 空字符 )   
@ (Shift + 2)
1   
01   
SOH   
   
Start of Header( 标题开始 )   
A
2   
02   
STX   
   
Start of Text( 正文开始 )   
B
3   
03   
ETX   
   
End of Text( 正文结束 )   
C
4   
04    ascii文字是啥
EOT   
   
End of Transmission( 传输结束 )   
D
5   
05   
ENQ   
   
Enquiry( 请求 )   
E
6   
06   
ACK   
   
Acknowledgment( 收到通知 / 响应 )   
F
7   
07   
BEL   
/a   
Bell ( 响铃 )   
G
8   
08   
BS   
/b   
Backspace( 退格 )   
H
9   
09   
HT   
/t   
Horizontal Tab( 水平制表符 )   
I
10   
0A   
LF   
/n   
Line feed( 换行键 )   
J
11   
0B   
VT   
/v   
Vertical Tab( 垂直制表符 )   
K
12   
0C   
FF   
/f   
Form feed( 换页键 )   
L
13   
0D   
CR   
/r   
Carriage return( 回车键 )   
M
14   
0E   
SO   
   
Shift Out( 不用切换 )   
N
15   
0F   
SI   
   
Shift In( 启用切换 )   
O
16   
10   
DLE   
   
Data Link Escape( 数据链路转义 )   
P
17   
11   
DC1   
   
Device Control 1( 设备控制 1) /XON(Transmit On)   
Q
18   
12   
DC2   
   
Device Control 2( 设备控制 2)   
R
19   
13   
DC3   
   
Device Control 3( 设备控制 3) /XOFF(Transmit Off)   
S
20   
14   
DC4   
   
Device Control 4( 设备控制 4)   
T
21   
15   
NAK   
   
Negative Acknowledgement( 拒绝接收 / 无响应 )   
U
22   
16   
SYN   
   
Synchronous Idle( 同步空闲 )   
V
23   
17   
ETB   
   
End of Trans the Block( 传输块结束 )   
W
24   
18   
CAN   
   
Cancel( 取消 )   
X
25   
19   
EM   
   
End of Medium( 已到介质末端 / 介质存储已满 )   
Y
26   
1A   
SUB   
   
Substitute( 替补 / 替换 )   
Z
27   
1B   
ESC   
/e   
Escape( 溢出 / 逃离 / 取消 )   
[
28   
1C   
FS   
   
File Separator( 文件分割符 )   
/
29   
1D   
GS   
   
Group Separator( 分组符 )   
]
30   
1E   
RS   
   
Record Separator( 记录分隔符 )   
^ (Shit + 6)
31   
1F   
US   
   
Unit Separator( 单元分隔符 )   
_ (Shift + -)
32   
20   
SP   
   
White space   
[Space] *
127   
7F   
DEL   
   
Delete( 删除 )   
[Delete] *
注 (*) :
1.  转义字符:即在 C 语言中或其他地方如何表示。
2.  用键盘输入控制字符:其中, 32 是空格键, 127 是 Delete 键,都不需要加 Ctrl 键,即可直接输入。
3.  可以通过  “Ctrl+ 对应按键 ” 实现上述控制字符的输入 ,  你可能遇到的一些,比如 : 用 Ctrl+V 输入 SYNC , Ctrl+M 输入Enter (当然也可以直接用 Enter 键,但是在 Windows 下面,其可能会发送两个字符: CR 和 LF ), Ctrl+Q 输入 XON ,Ctrl+S 输入 XOFF 等等。
其具体每个控制字符的含义,详解介绍如下:
【 ASCII 中的 Function/Control Code 功能字符的详细含义】
0 – NUL – NUL l  字符 / 空字符
ASCII 字符集中的空字符, NULL ,起初本意可以看作为 NOP (中文意为空操作,就是啥都不做的意思),此位置可以忽略一个字符。
之所以有这个空字符,主要是用于计算机早期的记录信息的纸带,此处留个 NUL 字符,意思是先占这个位置,以待后用,比如你哪天想起来了,在这个位置在放一个别的啥字符之类的。
后来呢, NUL 字符被用于 C 语言中,字符串的终结符,当一个字符串中间出现 NUL / NULL ,代码里面表现为 /0 ,的时候,就意味着这个是一个字符串的结尾了。这样就方便按照自己需求去定义字符串,多长都行,当然只要你内存放得下,然后最后加一个 /0,  即空字符,意思是当前字符串到此结束。
1 – SOH – S tart  O f H eading  标题开始
如果信息沟通交流主要以命令和消息的形式的话, SOH 就可以用于标记每个消息的开始。
1963 年,最开始 ASCII 标准中,把此字符定义为 Start of Message ,后来又改为现在的 Start Of Heading 。
现在,这个 SOH 常见于主从( master-slave )模式的 RS232 的通信中,一个主设备,以 SOH 开头,和从设备进行通信。这样方便从设备在数据传输出现错误的时候,在下一次通信之前,去实现重新同步( resynchronize )。如果没有一个清晰的类似于 SOH 这样的标记,去标记每个命令的起始或开头的话,那么重新同步,就很难实现了。
2 – STX – S tart O f T ext  文本开始
3 – ETX – E nd Of T ext  文本结束
通过某种通讯协议去传输的一个数据(包),称为一帧的话,常会包含一个帧头,包含了寻址信息,即你是要发给谁,要发送到目的地是哪里,其后跟着真正要发送的数据内容。
而 STX ,就用于标记这个数据内容的开始。接下来是要传输的数据,最后是 ETX ,表明数据的结束。
其中,中间具体传输的数据内容, ASCII 规范并没有去定义,其和你所用的传输协议,具体自己要传什么数据有关。
帧头   
数据或文本内容   
   
SOH(表明帧头开始)   
。。。。(帧头信息,比如包含了目的地址,表明你发送给谁等等)   
STX (表明数据开始)   
。。。(真正要传输的数据)   
ETX (表明数据结束)
                   
不过其中有趣的是, 1963 年, ASCII 标准最初版本的时候,把现在的 STX 叫做 EOA ( End Of Address ), ETX 叫做(End Of Message )。这是因为,最早的时候,一个消息中,总是包含一个开始符和一个终止符。现在的新的定义,使得可以去发送一个固定长度的命令,而只用一个 SOH 表明帧头开始即可,而不需要再加上一个命令终止符或帧头结束符。
总结一下:
一般发送一个消息,包含了一个帧头和后面真正要传的数据。
而对于帧头,属于控制类的信息,这部分之前属于命令,后面的真实要传的数据属于数据。即消息 = 帧头 + 数据。
而之前的命令都要有个开始符和结束符,这样就是:
消息        =  帧头                                +  要传的数据
=  帧头开始 + 帧头信息 + 帧头结束        +  要传的数据
而现在新的定义,使得只需要:
消息        =  帧头  + 要传的数据
= SOH (表明帧头开始) + 帧头信息    +  要传的数据
= SOH (表明帧头开始) + 帧头信息    + STX +  数据内容 +ETX
就可以少用一个帧头结束符。
而如今,在很多协议中,也常见到,一个固定长度的帧头,后面紧接着就是数据了,而没有所谓的帧头结束符之类的东西去区分帧头和数据。
4 – EOT – E nd O f T ransmission  传输结束
5 – ENQ – ENQ uiry  请求
6 – ACK – ACK nowledgment  回应 / 响应
7 – BEL – [audible] BEL l
在 ASCII 字符集中, BEL ,是个比较有意思的东东。因为其原先本意不是用来数据编码的,于此相反, ASCII 中的其他字符,都是用于字符编码(即用什么字符,代表什么含义)或者起到控制设备的作用。 BEL 用一个可以听得见的声音,来吸引人们的注意,其原打算即用于计算机也用于一些设备,比如打印机等。 C 语言里面也支持此 BEL ,用 /a 来
实现这个响铃。
8 – BS – B ackS pace  退格键
退格键的功能,随着时间变化,意义也变得不同了。
起初,意思是,在打印机和电传打字机上,往回移动一格光标,以起到强调该字符的作用。比如你想要打印一个 a ,然后加上退格键后,就成了 aBS^ 。在机械类打字机上,此方法能够起到实际的强调字符的作用,但是对于后来的 CTR 下时期来说,就无法起到对应效果了。
而现代所用的退格键,不仅仅表示光标往回移动了一格,同时也删除了移动后该位置的字符。在 C 语言中,退格键可以用/b 表示。
9 – HT – H orizontal T ab  水平制表符
ASCII 中的 HT 控制符的作用是用于布局的。
其控制输出设备前进到下一个表格去处理。而制表符 Table/Tab 的宽度也是灵活不固定的,只不过,多数设备上,制表符Tab 的宽度都预定义为 8 。水平制表符 HT 不仅能减少数据输入者的工作量,对于格式化好的文字来说,还能够减少存储空间,因为一个 Tab 键,就代替了 8 个空格,所以说省空间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。