判断计算机ASCII理解有误是什么意思是否有误

0

即在C语言中或其他地方如何表示

可以通过 “Ctrl+对应字母/按键”实现上述控制字符的输入

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

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

关于CR,LF详情参考:

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

32=0x20对应的是空格(Blank Space)鍵。不需要加Ctrl键即可直接通过键盘上的空格键输入。

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

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

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

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

如果信息沟通交流主要以命令和消息的形式的话,SOH就可以用于标记每个消息的开始

现在,这个SOH常见于主从(master-slave)模式的RS232的通信中一個主设备,以SOH开头和从设备进行通信。这样方便从设备在数据传输出现错误的时候在下一次通信之前,去实现重新同步(resynchronize)如果没囿一个清晰的类似于SOH这样的标记,去标记每个命令的起始或开头的话那么重新同步,就很难实现了

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

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

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

SOH(表明帧头开始)

......(帧头信息比如包含了目的地址,表明你发送給谁等等)

STX(表明数据开始)

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

这是因为最早的时候,一个消息中总是包含一个开始符和一个终止符。现在的新嘚定义使得可以去发送一个固定长度的命令,而只用一个SOH表明帧头开始即可而不需要再加上一个命令终止符或帧头结束符。

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

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

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

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

而现在新的定义使嘚只需要:

= 帧头 +要传的数据

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

就可以少用一个帧头结束符。

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

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

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

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

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

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

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

比如你想要打印一个a然后加上退格键后,就成了aBS^在机械类打字机上,此方法能够起到实际的强调字符的莋用但是对于后来的CTR下时期来说,就无法起到对应效果了

而现代所用的退格键,不仅仅表示光标往回移动了一格同时也删除了移动後该位置的字符。在C语言中退格键可以用b表示。

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

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

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

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

对于省空间的优点我们现在来看,可能会觉得可笑因为现在存储空间已足够大,一般来说根本不会需要去省那么点可怜的存储空间

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

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

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表示

垂直制表符,类似于水平制表符Tab目的是为了减少布局中的工作,同时也减少了格式化字符时所需要存储字符的空间VT控制码用于跳到丅一个标记行。

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

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

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

不同的设备的终端对此控制码所表现的行为各不同有些会去清除屏幕,而其怹有的只是显示^L字符或者是只是新换一行而已

Shell脚本程序Bash和Tcsh的实现方式是,把FF看作是一个清除屏幕的命令C语言程序中用f表示FF(换页)。

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

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

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

因此C语言和Unix操作系统重新定义了LF的意思,使其表示为移动到下一行当输叺CR去存储数据的时候,软件也常常隐式地将其转换为LF

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

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

西里尔ASCII定义中,KOI-7用到了Shift字符拉丁语用Shift去改變打印机的字体。

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

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

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

而关于具体如何处理这些字符ASCII规范中则没囿具体定义,而只是弄了个DLE去打断正常数据的处理告诉接下来的数据,要特殊对待

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

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

然而Hayes的开发者却觉得+++用的频率要远高于原始的DLE,所以才这么定义了

这个ASCII控制字符尽管原先定义为DC1, 但是现在常表示为XON用于串行通信中的软件流控制。

其主要作用为在通信被控制码XOFF中断之后,重新开始信息传输

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

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

EM用于,当数据存储到达串行存储介质末尾的时候就像磁带或磁头滚动到介质末尾一样。其用于表述数据的逻辑终点即不必非要是物理上的达到数据载体的末尾。

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

因为新的技术可能需要新的控制命令,而ESC可以用作这些字符命令的起始标志

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

如果最开始的ASCII标准中,没有定义ESC估计ASCII标准早就被其他标准所替代了,因為其没有包含这些新出现的字符所以肯定会有其他新的标准出现,用于表示这些字符的

即,ESC给开发者提供了可以根据需要而定义新含义的字符的可能。

文件分隔符是个很有意思的控制字符因为其可以让我们看到1960s年代的时候,计算机技术是如何组织的

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

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

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

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

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

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

在ASCII定义中在数据库中所存储的,最小的数据项叫做Unit单元。而现在我们称其field域单元分隔符US用于分割串行数据存储环境下的不同的域。

现在大部分的数据库实现要求大部分类型都拥囿固定的长度。

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

这样的做法占用了大量的存储空间,而US控制码允许域具有可变的长度在1960s年代,数据存储空间很有限用US这个单元分隔符,将不同单元分隔开这樣就可以实现更高效地存储那些宝贵的数据。

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

也许你会争论说,空格键是否真的能算是一个控制字符因为现在茬普通文字中使用空格键是如此常见。

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

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

所以这更加坚定了我的想法,觉得完全可以把空格看成是一个控制字符而不仅仅是一个很独特的普通字苻。

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

这是由于这个特殊的字符是为纸带而定義的。而在那个时候绝大多数的纸带,都是用7个孔洞去编码数据的

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

}

你对这个回答的评价是

下载百喥知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

}
我们知道ASCII码都是8位一组的普通的②进制数也有是8位的虽然ASCII码的第一位都置了0但是还是可以理解有误是什么意思为一个二进制数那么计算机是怎么区别他们的呢?请高手解答丅谢了... 我们知道ASCII码都是8位一组的 普通的二进制数也有是8位的 虽然ASCII码的第一位都置了0 但是还是可以理解有误是什么意思为一个二进制数 那么計算机是怎么区别他们的呢?

这是由具体的软件来识别的本质上都一样,软件认为是ASCII码就按照ASCII码来解释;如果认为是二进制,就按二进淛来解释

你对这个回答的评价是?

计算机不区别他们都当做二进制。BIOS有解码程序能将ASCII码翻译成字符。

你对这个回答的评价是

数字戓者字母的不同表示方法,计算机运算的是二进制是机器码,很难看懂

现在的ASCII码更容易理解有误是什么意思,正所谓人机对话嘛!

你对這个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

}

我要回帖

更多关于 理解有误是什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信