`
freesoftman
  • 浏览: 313974 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

换行符‘\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罗。哈哈

 

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,分析完毕!大致有了个了解了, 我要开始写代码了。呵呵,你懂了么?

分享到:
评论

相关推荐

    MySQL数据中很多换行符和回车符的解决方法

    我到公司后先测试一下客户给我的错误示例(果然搜不到),然后排查一下昨天的数据是否有问题,发现昨天客户用excel导入的数据中,存在很多\r\n这种换行符和回车符。 如:库中数据为:“换行符\n换行符\n换行符”,...

    C++读取到回车换行符问题处理

    今天在编写99乘法在线小游戏(看过我的 linux下c实现的数据库备份(第四版)应该知道我在那里提过^.^)的时候遇到读取文件的信息遇到回车换行符的烦恼。 比如我文件里面有如下信息: name=qizexi sex=man 我希望读取...

    textarea换行符

    在textarea中输入回车符 在js读取textarea中的值有\r\n然后到业务层转换到string中就有可能变成空格形式然后被存入数据库,当在取出此值的时候则会变成空格的形式,因此我们需要将不显示的\r\n替换一下。

    后台读取文本内容用正则表达式替换换行符

    中的回车符给困扰着, 回车换行的内容(\r\n)经常需要显示为HTML中的 ,这时就需要做替换操作了。 如果只是简单的将字符串strObj调用replace()方法,则结果只替换第一个回车符, 问题不难,关键是得...

    正则表达式.号元字符(除了回车符\r和换行符\n)

    主要介绍了正则表达式.号元字符(除了回车符r和换行符n),需要的朋友可以参考下

    C#中正则表达式与回车换行符问题

    C#中,读取文本文件内容,里面往往有许多回车换行符(“\r\n”),虽然一般不可见,但却实实在在的存在。这时候,使用正则表示式进行匹配,需要考虑其存在。今天就遇到这样一个问题: 有文本文件内容如下: DT ...

    GIT 换行符自动转换导致整个文件被修改的解决方案

    Unix/Linux使用的是LF,Mac后期也采用了LF,但Windows一直使用CRLF【回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)】作为换行符。而git入库的代码采用的是LF格式,它考虑到了跨平台协作的场景,提供了“换行符自动...

    Git处理换行符问题

    首先,你需要知道不同的操作系统对换行符的定义会有所不同,Unix或类Unix操作系统的换行符叫做LF,而windows系统的叫做CRLF,二者具有很大的区别:Unix系统里,每行结尾只有“&lt;换行&gt;”,即"n";Windows系统里面,...

    python去除字符串中的换行符

    今天写这个,要用python去除字符串中的换行符并写入文件,网上查阅,就一句代码replace(\n,),加上之后,搞了半天,还是不对。 以上是我今天遇到的问题,以下是解决方案。 本地测试是window系统,正式用的时候是unix...

    php表单转换textarea换行符的方法

    1.必须知道textarea中的换行符是 \n (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将\n转换成 ,其实不是的: 看php手册解释: nl2br – ...

    去掉文本中的空格与换行

    可以去掉 空格和 换行 void CMainFrame::OnTrim() { FILE *pfile=fopen("a.txt","r+"); //CString strin("s"); //fwrite(strin,1,1,pfile); fseek(pfile,0,SEEK_END); int len=ftell(pfile); char * buf; ...

    把富文本的回车转为br标签

    ‘↵’是回车符’/n’,这段内容是通过textarea人为编辑,提交给后端保存的。编辑框中可以识别的字符,在普通的标签里面没办法识别到,所以要转换成可以识别的 方法1 string.replace(/(rn|n|r)/gm, ) 然后再用...

    彻底搞清回车(0x0d)和换行(0x0a)

    让您彻彻底底搞清楚回车符(0x0d)与换行符(0x0a)的区别!

    php去除字符串换行符示例分享

    下面进行相关说明:首先说说 n,r,tn 软回车:在Windows中表示换行且回到下一行的最开始位置在Linux/unix中只表示换行,但不会回到下一行的开始位置r 软空格:在Linux/unix 中表示返回到当行的最开始位置在Mac OS中表示...

    解析PHP处理换行符的问题 \r\n

    一首先说说 \r 与\n的区别回车”(Carriage Return)和“换行”(Line Feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意...

    Python实现把回车符\r\n转换成\n

    最近在做cocos2d-x的简明配置,发现有的朋友的文本编辑器,自动将\r\n截断成\n,(在unix上换行使用\n,windows上,换行使用的是\r\n)于是,写了这个脚本,希望对一些朋友有所帮助,不用一行一行去改 import os ...

    C# SuperSocket CountSpliterReceiveFilter - 固定数量分隔符协议)不使用COMMAND

    C# SuperSocket 手把手教你入门 傻瓜教程---10...2、由于使用了CountSpliterReceiveFilter - 固定数量分隔符协议,因此KEY和BODY之间的分隔符为#,参数之间的分隔符也为#,而且字符串结尾不需要添加回车换行符\r\n。

    c语言转义字符 提供实例代码

    \n:换行符,移动到下一行开头。 \t:制表符,移动到当前行的下一个制表符位置。 \b:退格符,将光标移动到前一个字符位置。 \r:回车符,将光标移动到行首。 \f:换页符,将光标移动到下一页开头。 \0:空字符,...

Global site tag (gtag.js) - Google Analytics