No detail can be too detailed

在编写nios上类shell用户交互代码时,因为要检测终端输入字符,所以想到了这个问题,故分析之。 回车符的ascii码,ASCII码13‘\r’ 换行符的ascii码,ASCII码10‘\n’ 符号 ASCII码意义 \n10换行NL \r13回车CR

回车 \r 本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return 换行 \n 本义是光标往下一行(不一定到下一行行首),n的英文newline,控制字符可以写成LF,即Line Feed 这里面还有个小故事(来源于网络) 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,,告诉打字机把纸向下移一行。 这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。 后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。 /======================================/ \n: UNIX 系统行末结束符 \r\n: window 系统行末结束符 \r: MAC OS 系统行末结束符 /======================================/ 下面做几个实验。 1、win 中的情况 ‘\n’的测试 代码 cout<<”ssss”<<”\n”<<”ee”; 结果 ssss ee ‘r’的测试 代码 cout<<”ssss”<<”\r”<<”ee”; 结果 eess 文件中换行的实验 新建文件txt,输入 this is test n and r【回车】 在notepad++中显示为

然后用二进制查看器打开这个文件

我们看到回车之后实际是加入了两个字符串,ascii为13和10,也就是‘\r’’\n’

新建文件txt,输入 this is test n and r 在notepad++中显示为

然后用二进制查看器打开这个文件

从上面两个实验可知在一行结束时,win不会默认加上其他字符,只有手动加上回车时,会自动添加上两个字符。

在linux中测试 ‘\n’的测试 代码

结果

‘\r’的测试 代码

结果

文件中换行实验 vim linux_nr.txt this is test n and r[回车] 将文件用二进制查看器打开后发现

对应的是两个回车字符 vim linux_nr.txt(不回车) this is test n and r 将文件用二进制查看器打开

对照上面两组,linux系统中默认一行的结束是’\n’换行,所以手动回车,产生的是第二行结束符

将linux_nr.txt修改为

然后在win下打开 看看吧

二进制查看器结果为

所以这种现象发生的原因是,在linux中每一行是以’\n’为标志,然而win中是以‘\r’‘\n’为结束标志的,所以,win检测不到一行结束标志,就连续显示

于是夜莺会在黎明到来之前勇敢的将胸膛顶住蔷薇的刺,

No detail can be too detailed

相关文章:

你感兴趣的文章:

标签云: