本文共 1626 字,大约阅读时间需要 5 分钟。
在计算机还没有出现之前,有一种叫做电传打字机的机械打字机,每秒可以打 10 个字符。但是它有一个问题,就是打完一行换行的时候,要用 0.2 秒,正好可以打两个字符。要是在这 0.2 秒里面,又有新的字符传过来,那么这个这个字符将丢失。
于是,研究人员想了个办法解决这个问题,就是在每行后面添加两个表示结束字符。一个叫做 ”回车“ ,告诉打字机把打印头定位在左边界,不卷动滚轮;另一个叫做 ”换行“ ,告诉打字机把滚筒卷一格,不改变水平位置。这就是 ”换行“ 和 ”回车“ 的由来。
后来,计算机发明了,这两个概念也就被搬到了计算机上面。但是,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费,加一个就可以。于是就出现了分歧。(上面内容引自百度文库《回车符与换行符的区别》)
上面说了由来,这是让大家了解到为啥会有这两个东西。接下来我们首先了解一下系统实操中什么是回车符和换行符,以便于进行区分。
换行符就是另起一个新行,并且将光标移至新行的行首。
回车符就是将光标移至当前行的行首,回车符在编码中对用的是 ‘\n’。
注意: 在这里特别提一下回车符 ,他每次移至当前行首时,如果再写入内容,会把当前行以前的内容给覆盖掉。就以一个简单的代码做一下演示。下面的代码运行之后最终只会输出 5 , 这是前面所提到的内容覆盖。首先终端输出 0 ,之后将输出位置定位到当前行行首(即输出 0 所在行),第二次先输出 1,这里的 1 会覆盖前面的 0,之后又将输出位置定位到行首,以此类推,最终只会输出 5。
int main(){ int arr[] = { 0,1,2,3,4,5 }; for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { cout << arr[i]<< "\r"; } cout << endl; return 0;}// 运行结果 5
回车符对应的编码是 ‘\r’ ,控制字符为 CR,即Carriage Rerturn。r 对应的英文是 return,即返回到当前行行首,这样更便于理解记忆。
换行符 对应的编码是 ‘\n’ ,控制字符是LF,即Line Feed。n 对应的英文是 newline,即返回到新行的行首。
Windows
‘\r’ ASCII码转换为十进制数为 013。
‘\n’ ASCII码转换为十进制数为 010。
在Windows系统中每行的结尾是 <回车> <换行>,即“\r\n"。下面我们便来进行验证。
在Windows下我们建立一个txt文本文件,里面的内容只利用键盘输入两个 Enter 键(记住是两个,光标就会定位到第三行,第三行连回车都没有)。如下图所示,文本文件中的光标在第三行,但是却没有实际的文本内容,通过属性查看,该文本文档占用四字节。
之后,我们再用UE打开该文本文档,并且用十六进制查看。结果如图所示。0D – 013 0A – 010
这也就表示Woindows键盘输入的换行符确实是由 “\r\n” 构成,即 “013 010”。
Linux
Linux系统中,每行的结尾只有 <换行>,即 “\n”。
同样的,下面我们到 Linux 系统中去查看下:
同上面一样,在 Linux 系统中,创建 一个普通文件,照例只输入两个 Enter 回车键
然后通过十六进制打开:
不出所料,产看结果为 0a 0a 0a —> 010 010 010 —> \n \n \n 。也就是说 Linux 系统中的确结尾是由换行符 ‘\n’ 组成。但值得注意的是不同于 Windows,输入了两个 Enter 键,有三个结尾符,这是因为 Linux 会在每一行都为你添加 ‘\n’,也就是说 Linux 第三行有结尾符,而 Windows 却没有。
转载地址:http://zbozi.baihongyu.com/