十进制 十六进制 控制字符 转义字符 说明 Ctrl + 下列字母
0 00 NUL \0 Null character(空字符) @
1 01 SOH   Start of Header(标题開始) A
2 02 STX   Start of Text(正文開始) B
3 03 ETX   End of Text(正文结束) C
4 04 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(记录分隔符) ^
31 1F US   Unit Separator(单元分隔符) _
32 20 SP   White space [Space]
127 7F DEL   Delete(删除) ?

 

 

 

 

 

 

即在C语言中或其它地方怎样表示。

能够通过 “Ctrl+相应字母/按键”实现上述控制字符的输入

以下列举一些你可能遇到的情况:

  • 用Ctrl+V输入[SYNC]
  • 用Ctrl+M输入[Enter]                            

当然也能够直接用Enter键,可是在Windows以下,其会发送两个字符:CR和LF

关于CR,LF。详情參考:

  • 用Ctrl+Q输入XON
  • 用Ctrl+S输入XOFF

注意此处想要在键盘上输入这三个字符的话,是须要通过Shift加上相应字符才干输入的:

  • @:用Shift + 2输入
  • ^:用Shift + 6输入
  • _:用Shift + -输入

32=0x20。相应的是空格(Blank Space)键。

不须要加Ctrl键,就可以直接通过键盘上的空格键输入。

127=0x7F=删除(Delete)键;,除了能够用键盘上的删除键输入,也能够用'Ctrl+?'输入。

 

 

 0 – NUL – NULl 字符/空字符

ASCII字符集中的空字符,NULL,起初本意能够看作为NOP(中文意为空操作,就是啥都不做的意思),此位置能够忽略一个字符。

之所以有这个空字符,主要是用于计算机早期的记录信息的纸带。此处留个NUL字符,意思是先占这个位置,以待后用,比方你哪天想起来了,在这个位置在放一个别的啥字符之类的。

后来呢,NUL字符被用于C语言中,字符串的终结符。当一个字符串中间出现NUL/ NULL。代码里面表现为\0,的时候。就意味着这个是一个字符串的结尾了。这样就方便依照自己需求去定义字符串,多长都行,当然仅仅要你内存放得下,然后最后加一个\0, 即空字符,意思是当前字符串到此结束。

 

1 – SOH – Start  Of Heading 标题開始

假设信息沟通交流主要以命令和消息的形式的话,SOH就能够用于标记每一个消息的開始。

1963年。最開始ASCII标准中。把此字符定义为Startof Message,后来又改为如今的Start Of Heading。

如今,这个SOH常见于主从(master-slave)模式的RS232的通信中,一个主设备,以SOH开头,和从设备进行通信。

这样方便从设备在传输数据出现错误的时候。在下一次通信之前。去实现又一次同步(resynchronize)。

假设没有一个清晰的相似于SOH这种标记。去标记每一个命令的起始或开头的话,那么又一次同步,就非常难实现了。

2 – STX,3 – ETX

2 – STX – Start Of Text 文本開始

3 – ETX – End Of Text 文本结束

通过某种通讯协议去传输的一个数据(包),称为一帧的话,常会包括一个帧头,包括了寻址信息,即你是要发给谁,要发送到目的地是哪里,其后跟着真正要发送的数据内容。

而STX,就用于标记这个数据内容的開始。接下来是要传输的数据,最后是ETX,表明数据的结束。

当中,中间详细传输的数据内容,ASCII规范并没有去定义,其和你所用的传输协议,详细自己要传什么数据有关。

 

帧头

数据或文本内容

SOH(表明帧头開始)

......(帧头信息,比方包括了目的地址。表明你发送给谁等等)

STX(表明数据開始)

......(真正要传输的数据)

ETX(表明数据结束

 

只是当中有趣的是,1963年。ASCII标准最初版本号的时候,把如今的STX叫做EOA(End Of Address),ETX叫做(End Of Message)。

这是由于,最早的时候。一个消息中,总是包括一个開始符和一个终止符。如今的新的定义。使得能够去发送一个固定长度的命令,而仅仅用一个SOH表明帧头開始就可以。而不须要再加上一个命令终止符或帧头结束符。

总结一下:

一般发送一个消息,包括了一个帧头和后面真正要传的数据。

而对于帧头,属于控制类的信息,这部分之前属于命令,后面的真实要传的数据属于数据。即消息=帧头+数据。

而之前的命令都要有个開始符和结束符,这样就是:

消息

= 帧头                       + 要传的数据

= 帧头開始+帧头信息+帧头结束 + 要传的数据

而如今新的定义,使得仅仅须要:

消息

= 帧头 +要传的数据

= SOH(表明帧头開始)+帧头信息+ 要传的数据

= SOH(表明帧头開始)+帧头信息   + STX + 数据内容+ETX

就能够少用一个帧头结束符。

而如今。在非常多协议中,也常见到,一个固定长度的帧头。后面紧接着就是数据了,而没有所谓的帧头结束符之类的东西去区分帧头和数据。

 4 – EOT – End Of Transmission 传输结束

5 – ENQ – ENQuiry 请求

6 – ACK – ACKnowledgment 回应/响应

 7 – BEL – [audible] BELl

在ASCII字符集中,BEL,是个比較有意思的东东。

由于其原先本意不是用来数据编码的,于此相反,ASCII中的其它字符,都是用于字符编码(即用什么字符,代表什么含义)或者起到控制设备的作用。

BEL用一个能够听得见的声音。来吸引人们的注意。其原打算即用于计算机也用于一些设备。比方打印机等。

C语言里面也支持此BEL,用a来实现这个响铃。

8 – BS – BackSpace 退格键

退格键的功能,随着时间变化。意义也变得不同了。

起初,意思是,在打印机和电传打字机上,往回移动一格光标,以起到强调该字符的作用。

比方你想要打印一个a,然后加上退格键后,就成了aBS^。

在机械类打字机上。此方法能够起到实际的强调字符的作用。可是对于后来的CTR下时期来说,就无法起到相应效果了。

而现代所用的退格键,不仅仅表示光标往回移动了一格,同一时候也删除了移动后该位置的字符。

在C语言中。退格键能够用b表示。

 9 – HT – Horizontal Tab 水平制表符

ASCII中的HT控制符的作用是用于布局的。

其控制输出设备前进到下一个表格去处理。

而制表符Table/Tab的宽度也是灵活不固定的,仅仅只是。多数设备上。制表符Tab的宽度都提前定义为8。

水平制表符HT不仅能降低数据输入者的工作量,对于格式化好的文字来说,还能够降低存储空间,由于一个Tab键,就取代了8个空格,所以说省空间。

对于省空间的长处,我们如今来看,可能会认为可笑。由于如今存储空间已足够大,一般来说根本不会须要去省那么点可怜的存储空间。

可是,实际上在计算机刚发明的时候,存储空间(主要指的是内存)极其有限也极其昂贵,并且像ZIP等压缩方法也还没发明呢,所以对于当时来说。对于存储空间,那是能够省一点是一点。省不论什么一点,都是好的,也都是不easy的,省空间就是省钱啊。

C语言中,用t表示制表符。

10 – LF – Line Feed 换行

LF,直译为(给打印机等)喂一行,意思就是所说的,换行。

换行字符,是ASCII字符集中。被误用的字符中的当中一个。

LF的最原始的含义是。移动打印机的头到下一行。

而另外一个ASCII字符。CR(Carriage Return)才是将打印机的头,移到最左边即一行的開始,行首。非常多串口协议和MS-DOS及Windows操作系统,也都是这么实现的。

而于此不同,对于C语言和Unix操作系统,其又一次定义了LF字符的含义为新行,即LF和CR的组合才干表达出的,回车且换行的意思。

虽然你能够争论哪种使用方法是错的。可是。不可否认,是从程序的角度出发,C语言和Unix对此LF的含义实现显得就非常自然,而MS-DOS的实现更接近于LF的本意。

假设最開始ASCII标准中,及定义 CF也定义newline。那样意思会清晰。会更好理理解:

LF表示物理上的。设备控制方面的移动到下一行(并没有移动到行首)。

新行(newline)表示逻辑上文本分隔符。即回车换行。

只是呢。如今人们常将LF用做newline新行的功能,而大多数文本编辑软件也都能够处理单个LF或者CR/LF的组合了。

LF在C语言中。用n表示。

11 – VT – Vertical Tab 垂直制表符

垂直制表符。相似于水平制表符Tab,目的是为了降低布局中的工作。同一时候也降低了格式化字符时所须要存储字符的空间。

VT控制码用于跳到下一个标记行。

说实话。还真没看到有些地方须要用这个VT呢,由于一般在换行的时候,都是用LF取代VT了。

12 – FF – Form Feed  换页

设计换页键,是用来控制打印机行为的。

当打印机收到此键码的时候,打印机移动到下一页。

不同的设备的终端对此控制码所表现的行为各不同。

有些会去清除屏幕,而其它有的仅仅是显示^L字符或者是仅仅是新换一行而已。

Shell脚本程序Bash和Tcsh的实现方式是。把FF看作是一个清除屏幕的命令。

C语言程序中用f表示FF(换页)。

13 – CR – Carriage return 机器的滑动部分/底座 返回 -> 回车

CR回车的原意是让打印头回到左边界。并没有移动到下一行。

随着时间流逝。后来人把CR的意思弄成了Enter键。用于示意输入完成。

在数据以屏幕显示的情况下,人们在Enter的同一时候。也希望把光标移动到下一行。

因此C语言和Unix操作系统,又一次定义了LF的意思,使其表示为移动到下一行。

当输入CR去存储数据的时候,软件也经常隐式地将其转换为LF。

 14 – SO,15 – SI

14 – SO – Shift Out 不用切换

15 – SI – Shift In  启用切换

早在1960s年代,定义ASCII字符集的人,就已经懂得了,设计字符集不单单能够用于英文字符集。也要能应用于外文字符集,是非常重要的。

定义Shift In 和Shift Out的含义。即考虑到了此点。

最開始。其意为在西里尔语和拉丁语之间切换。

西里尔ASCII定义中,KOI-7用到了Shift字符。

拉丁语用Shift去改变打印机的字体。

在此种用途中,SO用于产生双倍宽度的字符,而用SI打印压缩的字体。

 16 – DLE – Data Link Escape 数据链路转义

有时候。我们须要在正在进行的通信过程中去发送一些控制字符。可是。总有一些情况下,这些控制字符却被看成了普通的数据流。而没有起到相应的控制效果。而ASCII标准中。定义DLE来解决这类问题。

假设数据流中检測到了DLE,数据接收端则对其后面接下来的数据流中的字符,另作处理。

而关于详细怎样处理这些字符。ASCII规范中则没有详细定义,而仅仅是弄了个DLE去打断正常数据的处理,告诉接下来的数据,要特殊对待。

依据Modem中的Hayes通信协议DLE定义为“无声+++无声”。

以我的观点。这样可能会更好:假设Hayes协议没有把DLE处理为嵌入通讯的无声状态。那样就符合现存的标准了。

然而Hayes的开发人员却认为+++用的频率要远高于原始的DLE。所以才这么定义了。

17 – DC1 – Device Control 1 / XON – Transmission on

这个ASCII控制字符虽然原先定义为DC1, 可是如今常表示为XON。用于串行通信中的软件流控制。

其主要作用为,在通信被控制码XOFF中断之后,又一次開始信息传输。

用过串行终端的人应该还记得,当有时候数据出错了,按Ctrl+Q(等价于XON)有时候能够起到又一次传输的效果。

这是由于。此Ctrl+Q键盘序列实际上就是产生XON控制码,其能够将那些由于终端或者主机方面,由于偶尔出现的错误的XOFF控制码而中断的通信解锁。使其正常通信。

18 – DC2 – Device Control 2

19 – DC3 – Device Control 3 / XOFF – Transmission off 传输中断

 20 – DC4 – Device Control 4

 21 – NAK – Negative AcKnowledgment 负面响应-> 无响应, 非正常响应

22 – SYN – SYNchronous idle

23 – ETB – End of Transmission Block 块传输中止

 24 – CAN – CANcel 取消

25 – EM – End of Medium  已到介质末端,介质存储已满

EM用于。当数据存储到达串行存储介质末尾的时候。就像磁带或磁头滚动到介质末尾一样。

其用于表述数据的逻辑终点,即不必非要是物理上的达到数据载体的末尾。

 26 – SUB – SUBstitute character替补/替换

27 – ESC – ESCape 逃离/取消

字符Escape,是ASCII标准的首创的,由Bob Bemer提议的。用于開始一段控制码的扩展字符。如此。即能够不必将全部可能想得到的字符都放到ASCII标准中了。

由于。新的技术可能须要新的控制命令。而ESC能够用作这些字符命令的起始标志。

ESC广泛用于打印机和终端。去控制设备设置,比方字体。字符位置和颜色等等。

假设最開始的ASCII标准中,未定义ESC,预计ASCII标准早就被其它标准所替代了。由于其没有包括这些新出现的字符,所以肯定会有其它新的标准出现。用于表示这些字符的。

即。ESC给开发人员提供了,能够依据须要而定义新含义的字符的可能。

28 – FS – File Separator 文件分隔符

文件分隔符是个非常有意思的控制字符。由于其能够让我们看到1960s年代的时候。计算机技术是怎样组织的。

我们如今。习惯于随即訪问一些存储介质。比方RAM。磁盘,可是在定义ASCII标准的那个年代。大部分数据还是顺序的,串行的。而不是随机訪问的。此处所说的串行的。不仅仅指的是串行通信,还指的是顺序存储介质,比方穿孔卡片,纸带,磁带等。

在串行通信的时代。设计这么一个用于表示文件分隔符的控制字符,用于切割两个单独的文件。是一件非常明智的事情。而FS的原因就在于此。

29 – GS – Group Separator分组符

ASCII定义控制字符的原因中,当中一条就是考虑到了数据存储方面的情况。

大部分情况下。数据库的建立,都和表有关。包括了相应的记录。同一个表中的全部的记录,属于同一类型。不同的表中的记录。属于相应的不同的类型。

而分组符GS就是用来分隔串行数据存储系统中的不同的组。值得注意的是,当时还没有使用word的表格,当时ASCII时代的人。把他叫做组。

 30 – RS – Record Separator记录分隔符

记录分隔符RS用于分隔在一个组或表内的多个记录。

 31 – US – Unit Separator 单元分隔符

在ASCII定义中。在数据库中所存储的。最小的数据项。叫做Unit单元。

而如今我们称其field域。单元分隔符US用于切割串行数据存储环境下的不同的域。

如今大部分的数据库实现,要求大部分类型都拥有固定的长度。

虽然大部分时候可能用不到,可是对于每一个域,却都要分配足够大的空间。用于存放最大可能的成员变量。

这种做法,占用了大量的存储空间,而US控制码同意域具有可变的长度。

在1960s年代,数据存储空间非常有限,用US这个单元分隔符,将不同单元分隔开。这样就能够实现更高效地存储那些宝贵的数据。

还有一方面,串行存储的存储效率,远低于RAM和磁盘中所实现的表格存储。我个人无法想象,假设如今的数据。还是存储在自带或者带滚轮的磁带上。会是何种景象。

 32 – SP – White SPace 空格键

或许你会争论说。空格键是否真的能算是一个控制字符?由于如今在普通文字中使用空格键是如此常见。

可是,既然水平制表符和退格键在ASCII中,都被叫做控制字符了,那么我认为也非常自然地。能够把空格键(向前的空格)也叫做控制字符,毕竟,其本身并不代表一个真正的可见的字符。而仅仅仅仅是非经常常使用于输出设备,用于处理位置前向移动一格,清除当前位置的内容而已。

在非常多程序中,比方字符处理程序,白空格相同可能从导致行尾转到下一行行首。而网络浏览器将多个空格组合成单个空格输出。

所以。这更加坚定了我的想法,认为全然能够把空格看成是一个控制字符,而不仅仅是一个非常独特的普通字符。

127 – DEL – DELete  删除

有人或许会问。为何ASCII字符集中的控制字符的值都是非常小的,即0-32,而DEL控制字符的值却非常大,是127。

这是由于这个特殊的字符是为纸带而定义的。

而在那个时候,绝大多数的纸带,都是用7个孔洞去编码数据的。

而127这个值所相应的二进制值为111 1111b,表示全部7个比特位都是高,所以。将DEL用在现存的纸带上时,全部的洞就都被穿孔了。就把已经存在的数据都擦出掉了,就起到了相应的删除的作用了。

ASCII中的控制字符含义的更多相关文章

  1. 为什么ASCII是7位(导致各家编码的128~256字符都不同,给我带来很多困惑)——在标准ASCII中,其最高位(b7)用作奇偶校验位,附ASCII每个控制符的中文解释

    ASCII编码 ASCII是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英语和其他西欧语言.它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646. 请注意,ASCII是Amer ...

  2. if [ "$变量1"x = "$变量2"x ]中x的含义

    问题:if [ "$变量1"x = "$变量2"x ]中x的含义是? 答:“x”字符可以为任意字符,用于防止变量为空时,某些版本的bash中会产生错误: 在一个 ...

  3. sturct stat 结构体中 st_mode 的含义

    工作中遇到 else if( (s_buf.st_mode&S_IFMT) == S_IFDIR) return 2; else if( !(s_buf.st_mode&S_IFREG ...

  4. TortoiseSVN中图标的含义

    今天在使用svn时发现有好多不认识了,所以查了下svn帮助手册.借此总结了下 svn 中图标的含义 一个新检出的工作复本使用绿色的勾做重载.表示Subversion状态 正常. 在开始编辑一个文件后, ...

  5. C++中extern “C”含义深层探索

    C++中extern “C”含义深层探索 extern “C” 是一个双向都需要用到的语法表示,就是说在cpp引用c头文件,或者c引用cpp文件时都需要用到.但extern “C” 永远只能在cpp引 ...

  6. JS中的className含义

    问题描述:     JS中的className含义 问题解决:     className说明:         className属性可以设置和返回元素的class属性 可以有两种方法来获取对象的c ...

  7. Oracle Statspack报告中各项指标含义详解~~学习性能必看!!!

    Oracle Statspack报告中各项指标含义详解~~学习性能必看!!! Data Buffer Hit Ratio#<#90# 数据块在数据缓冲区中的命中率,通常应该在90%以上,否则考虑 ...

  8. intent.setFlags方法中参数值的含义

    intent.setFlags()方法中参数的含义 1.FLAG_ACTIVITY_NEW_TASK: 例如现在栈一的情况是:A    B   C(C位于栈顶),C通过intent跳转到D,并且这个I ...

  9. class$1,class$2,class$innerclass中的$的含义

    class文件名中的$的含义如下:   $后面的类是$前面的类的内部类 内部类有以下两种情况: 1.普通的组合类形式,即在一个类内部定义一个普通的类  public class Outer { cla ...

随机推荐

  1. React 中的 refs的应用

    React Refs React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上. 这个特殊的属性允许你引用 render() 返回的相应的支撑实例( back ...

  2. Linux配置nignx虚拟主机

    Nginx 是一个轻量级高性能的 Web 服务器, 并发处理能力强, 对资源消耗小, 无论是静态服务器还是小网站, Nginx 表现更加出色, 作为 Apache 的补充和替代使用率越来越高. 我在& ...

  3. maven也是Apache开发的,也是java开发的。maven需要你本地系统JDK的支持

    1. 3. 添加 M2_HOME 和 MAVEN_HOME 添加 M2_HOME 和 MAVEN_HOME 环境变量到 Windows 环境变量,并将其指向你的 Maven 文件夹. M2_HOME ...

  4. Mysql数据库事务的隔离级别和锁的实现原理分析

    Mysql数据库事务的隔离级别和锁的实现原理分析 找到大神了:http://blog.csdn.net/tangkund3218/article/details/51753243 InnoDB使用MV ...

  5. freeradius 启动报错Refusing to start with libssl version OpenSSL 1.0.1

    改动etc/raddb下的radiusd.conf文件 找到allow_vulnerable_openssl = no,改动成allow_vulnerable_openssl = yes

  6. WAP 图片 lazyload

    原理是根据屏幕上的坐标找到需要做 lazyload 的区域 1,先监听 scroll 事件 ,scrolling_lt window.addEventListener('scroll', functi ...

  7. SICP 习题 (1.41)解题总结

    SICP 习题1.41 看似和周边的题目没有关系,突然叫我们去定义一个叫double的过程,事实上这道题的核心还是高阶函数. 题目要求我们定义一个过程double,它以一个过程作为參数,这个作为參数的 ...

  8. Android学习之——自己搭建Http框架(2)——框架扩展

    · 本文主要解说的是Json指定转化成对象返回.下载进度更新,随时取消Request请求 一.Json指定转化成对象返回 上篇文章主要讲基础的框架搭建起来了,这次须要做一些些的扩展,这里Json转化用 ...

  9. mysql实战45讲 (三) 事务隔离:为什么你改了我还看不见 极客时间读书笔记

    提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务.最经典的例子就是转账,你要给朋友小王转100块钱,而此时你的银行卡只有100块钱. 转账过程具体到程序里会有一系列的操作,比如查询余额 ...

  10. node.js连接数据库基本操作、封装数据库操作,输出到网页

    声明:以下代码测试通过,不同于直接的复制粘贴乱七八糟未测试的代码,完全可以用,最后会附上所有的代码和sql文件 首先建立表,建表语句如下: /* SQLyog Ultimate v12.08 (64 ...