换行符‘\n’和回车符‘\r’详解(转载)

换行符‘\n’和回车符‘\r’

这是偶第二次自己写对外部的技术文档:

这次公司要开发一个有关从外部读取权限信息。

牵涉到了文件的解析。

在文件的解析中,最麻烦的可能就数对一些控制符号的理解了。

而首当其冲的就是换行符号'\n'与回车符号"\r".

google找到了这么一段信息:

换行符就是另起一行, 回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符  

'\n' 10 换行(newline)
'\r' 13 回车(return)

在windows系统下,回车换行符号 是"\r\n". 但是在Linux等系统下是没有"\r"符号的。

在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方, 这个时候就要注意既要判定"\r\n"又要判定"\n"。

现在还是对它很模糊的概念, 那么我们写个测试的代码吧!

bool checkLineSymbol() {
char *fileStr;
Int32 length = 0;
Int32 i =0;
Int32 number = 0;
fileStr = loadPolicyFile();
if(fileStr == NULL) {
return false;
}

length = cStrlen(fileStr);
cTrace("file char length: \n");
cTrace("%d\n", length);

for(i = 0; i < length; i++) {
number = (Int32)(*(fileStr + i));
cTrace("number: %d\n", number );
}

cTrace("test checkLineSymbol is end!\n");

}

       代码看不懂没有关系, 上面的代码主要功能是从一个txt文件中输出每个字符的数字。我的这个文本文件中主要是写入了“\n”两个字符,同时进行了一个回车的操作。我想看一下输 出的结果是什么。最后输出的结果,显示有4个字符, 分别是92, 110,13, 10。也就是说我只是写入了2个字符,但是通过文件操作函数的read,它给我读出了4个字符。那么这三个数字分别代表什么呢。

        我去查了一下assII码表,92 为‘\’, 110为 'n', 13与10是控制符号,分别是'cr','nl'。说明了当我们在编辑文本文件(nodepad)的时候。每次调入一个回车键的时候,nodepad编辑 器自动给我们加了13,10两个控制符号。

       后来我又使用了vim文本编辑器进行相同的编辑,输出的结果为92, 110, 10三个字符。说明vim编辑器里面,敲入一个回车键, 该编辑器只是给我们添加了一个10控制符号来表示换行。

       这里我引出一个话题, 那就是notepad编辑器为什么在敲入回车键的时候,微软工程师们要加入一个\r呢。而vim也就是Linux帮派不加入这个控制符号呢? 这里面有什么猫腻, 就由读者你自己去研究了。我就不管这些东东了。等你研究出来我google罗。哈哈

C代码
  1. bool checkLineNumber() {  
  2.     char nL = '\n';  
  3.     char rL = '\r';  
  4.     Int32 number = 0;  
  5.   
  6.     number = (Int32)nL;  
  7.     cTrace("\\n in code number is: \n");  
  8.     cTrace("%d\n", number);  
  9.   
  10.     number = (Int32)rL;  
  11.     cTrace("\\n in code number is: \n");  
  12.     cTrace("%d\n", number);  
  13.   
  14.     cTrace("test checkLineNumber is end");  
  15. }  
bool checkLineNumber() { 	char nL = '\n'; 	char rL = '\r'; 	Int32 number = 0;  	number = (Int32)nL; 	cTrace("\\n in code number is: \n"); 	cTrace("%d\n", number);  	number = (Int32)rL; 	cTrace("\\n in code number is: \n"); 	cTrace("%d\n", number);  	cTrace("test checkLineNumber is end"); }  

      上面这段代码,主要是说明一下,我们在编写代码中。有一个叫字符转义符号的问题。通常我们在解析文件中的数据的时候,都要判断文件是否需要换行。这样我们 就知道那里是换行,那里不换行了。以为我们以后的逻辑处理。

      

       那么为什么要引入字符转义符号呢?个人觉得主要是为了方便记忆吧。'\r',代表回车符号。 '\n'代表换行,外文也就是newLine,老外搞的一套东东。代码在进行编译的时候,编译器会做处理,把'\r'转成13。

      

       其实我们完全可以写成char nL = 13;来代表这个字符是回车符号。但是char nL = '\r'比较直观。这里我做一个猜测:在编译C阶段,char nL = 13;这段代码行可能比char nL = '\r'快。因为编译器要对后一个代码做一些额外的处理。当然这是没有必要的,因为毕竟这些消耗是可以忽略不记的,相对现在的计算机处理速度。

      

       好了,现在说说我上面代码的功能吧,主要是看看'\r'与'\n'分别是什么值。输出的结果是'\r'为转义成了13, '\n'被转义成了10.

       now,分析完毕!大致有了个了解了, 我要开始写代码了。呵呵,你懂了么?

原文地址:https://www.cnblogs.com/showker/p/1739947.html