关于/r和/n

原创 2006年06月09日 22:06:00

    今天对http协议包进行解析.协议规定每一行以/r/n作为结束.也就是CRLF(0D0A).

    搭一个测试环境,把协议包保存在文件里,再从文件读到内存进行解析.发现内存里就只有'/n',字符'/r'不见了.很奇怪.把程序和文件放在一台linux机器下测试,也是这样,内存里只有/n.但用ultra edit打开文件是可以看见有/r/n的.

    上网搜了一下,有人说"/r 就是换行 /n 是回车",换行和回车又有什么区别?引用一段文字说明:

    回车换行的来历:
    在PC出现以前,文秘们都是使用打字机打印文档资料的。(最著名的品版是Brother)。打字机是铅字打印,其键盘的排列与现在的PC键盘相同。(鉴于人们的使用习惯,打字机键盘-->终端键盘-->PC键盘,其键盘布局几乎没变过)。打字机的键盘上除了“Enter”(升行键)之外,还有一个机械装置-->“回车”,其意为将打印定位装置置为行首。“Enter”的含意为走纸升行,但如果不操作“回车”装置,打印位置将是当前的位置。
    在终端或PC上,“Enter”(即/n,0x0A)常代表了回车并且升行。在不同的OS中,文本文件的格式是有区别的,如DOS-->Windows、Unix-->Linux,在DOS-->Windows的文本文件中,使用了/r/n(0x0D 0x0A)来表示回车并且升行。在Unix-->Linux的文本文件中,使用/n(0x0A)来表示回车并且升行。即通常所说的Unix格式或DOS格式。

    在基于文本的通信协议定义时,对/r/n的使用有严格的定义,如在HTTP中,标识一行的结束,必须使用/r/n。

    按图索骥,查了一下msdn关于fread()函数的说明.有一句话If the given stream is opened in text mode, carriage return–linefeed pairs are replaced with single linefeed characters.也就是我以文本方式打开,函数会将/r/n转换成/n.要想看到/r/n应该以二进制方式打开.

    但照网页上的说法,在linux下执行程序文件应该只有/n,但很奇怪我测试的结果还是有/r/n.不知道为什么.

参见:http://www.codeguru.com/forum/showthread.php?s=&threadid=253826

http://blog.chinaunix.net/link.php?url=http://blog.csdn.net%2Fdroidphone%2Farticle%2Fdetails%2F66325

1.  ASoC的由来 ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。在ASoc出现之...
  • jgdu1981
  • jgdu1981
  • 2012年03月26日 09:59
  • 8033

关于\r和\n和\r\n

其实这个问题不是哪一种编程语言的问题,而是跟操作系统相关。 网上流传的一张图即可说明三者的区别: \r即是回车,return,回到这一行的行首 \n即是换行,new line ,...
  • three_co
  • three_co
  • 2017年10月24日 22:17
  • 887

\r,\n与\r\n有什么区别?

\n是换行,英文是New line。 \r是回车,英文是Carriage return。 如果用过机械打字机,就知道回车和换行的区别了。。。   换行就是把滚筒卷一格,不改变水平位置。      回...
  • amqvje
  • amqvje
  • 2014年08月04日 16:21
  • 14714

http协议 文件下载原理及多线程断点续传

最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下来比较好。起初只是想研究研究,但后来发现写个可重用性比较高的模块还是很有必要的,我想这也是大多数开发人员的习惯吧。 对于HTTP协议,向服务...
  • zhuhuiby
  • zhuhuiby
  • 2011年08月28日 05:19
  • 21332

HTTP文件下载原理

于HTTP协议,向服务器请求某个文件时,只要发送类似如下的请求即可: GET /Path/FileName HTTP/1.0Host: www.server.com:80Accept: *...
  • wang664626482
  • wang664626482
  • 2016年09月05日 16:56
  • 992

关于/r与/n 以及 /r/n 的区别总结

应该说还是区别的,\r就是回到行首,\n就是到下一行的,但是一般我们输出程序时,看不到明显的差别的 '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个...
  • longforus
  • longforus
  • 2016年07月16日 17:05
  • 4332

关于\r,\n,\r\n

——备忘 \r 是回车,return \n 是换行,newline 我们在平时使用电脑时,已经习惯了回车和换行一次搞定,敲一个回车键,即是回车,又是换行,但在早期的打字机上,要另起一行打字需...
  • jjmaiz
  • jjmaiz
  • 2012年12月28日 10:45
  • 361

C语言实现http的下载

实现http的下载 用C语言实现简单的http下载接口,方便移植到其他程序中使用 要满足的功能: 支持chunked方式传输的下载 被重定向时能下载重定向页面 要实现的接口为...
  • jasonzeng
  • jasonzeng
  • 2017年03月14日 15:28
  • 2158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于/r和/n
举报原因:
原因补充:

(最多只允许输入30个字)