zoukankan      html  css  js  c++  java
  • 换行符‘\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,分析完毕!大致有了个了解了, 我要开始写代码了。呵呵,你懂了么?

  • 相关阅读:
    判断DataReader中是否有指定列
    datatable dateset 载体传递数据、存储过程
    抓取网页信息
    捕获异常 winform
    修改myeclipse的jsp模板
    包装设计模式的实现以改进BufferedReader中的readLine方法为例
    查询图书馆借书情况-代码
    查询四六级成绩
    Sqlyog增加试用期
    MVC笔记-模板页布局
  • 原文地址:https://www.cnblogs.com/showker/p/1739947.html
Copyright © 2011-2022 走看看