ASCII中的控制字符含义
十进制 | 十六进制 | 控制字符 | 转义字符 | 说明 | 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+相应字母/按键”实现上述控制字符的输入 以下列举一些你可能遇到的情况:
当然也能够直接用Enter键,可是在Windows以下,其会发送两个字符:CR和LF 关于CR,LF。详情參考:
|
|
注意此处想要在键盘上输入这三个字符的话,是须要通过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中的控制字符含义的更多相关文章
- 为什么ASCII是7位(导致各家编码的128~256字符都不同,给我带来很多困惑)——在标准ASCII中,其最高位(b7)用作奇偶校验位,附ASCII每个控制符的中文解释
ASCII编码 ASCII是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英语和其他西欧语言.它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646. 请注意,ASCII是Amer ...
- if [ "$变量1"x = "$变量2"x ]中x的含义
问题:if [ "$变量1"x = "$变量2"x ]中x的含义是? 答:“x”字符可以为任意字符,用于防止变量为空时,某些版本的bash中会产生错误: 在一个 ...
- sturct stat 结构体中 st_mode 的含义
工作中遇到 else if( (s_buf.st_mode&S_IFMT) == S_IFDIR) return 2; else if( !(s_buf.st_mode&S_IFREG ...
- TortoiseSVN中图标的含义
今天在使用svn时发现有好多不认识了,所以查了下svn帮助手册.借此总结了下 svn 中图标的含义 一个新检出的工作复本使用绿色的勾做重载.表示Subversion状态 正常. 在开始编辑一个文件后, ...
- C++中extern “C”含义深层探索
C++中extern “C”含义深层探索 extern “C” 是一个双向都需要用到的语法表示,就是说在cpp引用c头文件,或者c引用cpp文件时都需要用到.但extern “C” 永远只能在cpp引 ...
- JS中的className含义
问题描述: JS中的className含义 问题解决: className说明: className属性可以设置和返回元素的class属性 可以有两种方法来获取对象的c ...
- Oracle Statspack报告中各项指标含义详解~~学习性能必看!!!
Oracle Statspack报告中各项指标含义详解~~学习性能必看!!! Data Buffer Hit Ratio#<#90# 数据块在数据缓冲区中的命中率,通常应该在90%以上,否则考虑 ...
- intent.setFlags方法中参数值的含义
intent.setFlags()方法中参数的含义 1.FLAG_ACTIVITY_NEW_TASK: 例如现在栈一的情况是:A B C(C位于栈顶),C通过intent跳转到D,并且这个I ...
- class$1,class$2,class$innerclass中的$的含义
class文件名中的$的含义如下: $后面的类是$前面的类的内部类 内部类有以下两种情况: 1.普通的组合类形式,即在一个类内部定义一个普通的类 public class Outer { cla ...
随机推荐
- STM32使用HAL库实现ADC单通道转换
STM32的ADC转换还是很强大的,它具有多个通道选择,这里我就不细说,不了解的可以自行百度,这里只是选取单通道,实现ADC转换.在文章开始之前,我说一下数据左对齐跟右对齐的差别,以前一直糊里糊涂的, ...
- 【hdu 6319】Ascending Rating
[链接] 我是链接,点我呀:) [题意] 给你一个长为n的数组a 让你对于每个长度为m的窗口. 算出其中的最大值以及从左往右遍历的时候这个最大值更新的次数. [题解] 单调队列. 从后往前滑动窗口. ...
- Tarjan强联通分量【模板】
#include <algorithm> #include <cstdio> using namespace std; ); int n,m,v,u; int edgesum, ...
- maven也是Apache开发的,也是java开发的。maven需要你本地系统JDK的支持
1. 3. 添加 M2_HOME 和 MAVEN_HOME 添加 M2_HOME 和 MAVEN_HOME 环境变量到 Windows 环境变量,并将其指向你的 Maven 文件夹. M2_HOME ...
- 关于Thread的那些事
关于Thread的那些事 1 : 你能够调用线程的实例方法Join来等待一个线程的结束.比如: public static void MainThread() { Thread t = new Thr ...
- HDU 1285--确定比赛名次【拓扑排序 && 邻接表实现】
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- STL 之 iterator traits 备忘
//5种迭代器.为了激活重载机制,定义的5个类型.每种迭代器就是一个类型. struct input_iterator_tag{}; struct output_iterator_tag{}; str ...
- CodeForces 176B - Word Cut 计数DP
B. Word Cut Let's consider one interesting word game. In this game you should transform one word i ...
- bzoj4568: [Scoi2016]幸运数字(LCA+线性基)
4568: [Scoi2016]幸运数字 题目:传送门 题解: 好题!!! 之前就看过,当时说是要用线性基...就没学 填坑填坑: %%%线性基 && 神犇 主要还是对于线性基的运用和 ...
- Java 7之传统I/O - 字符类 StringReader和StringWriter
转自:https://www.xuebuyuan.com/2015312.html 这两个类将String类适配到了Reader和Writer接口,在StringWriter类实现的过程中,真正使用的 ...