关于/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

相关文章推荐

AIX命令(n-r)

  • 2014年10月08日 23:02
  • 5.54MB
  • 下载

R&S WLAN802.11n From SISO to MIMO

  • 2014年11月01日 23:24
  • 4.35MB
  • 下载

Linux下的换行符\n\r剖析

Linux下的换行符\n\r剖析 来历:计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时...

ASUS A8N5X R1.00 BIOS.BIN

  • 2012年12月22日 16:56
  • 512KB
  • 下载

Dell 14R-N4010 .rar

  • 2012年12月22日 17:16
  • 1.64MB
  • 下载

C语言 EOF,NULL(\0),换行符(\n),回车(\r)是什么?区别是什么?

第一个问题是EOF  它是end of file的缩写,表示"文字流"(stream)的结尾。这里的"文字流",可以是文件(file),也可以是标准输入(stdin)。 比如,下面...

AIX 5L V5.3 命令参考大全,卷 4,n-r

  • 2008年10月13日 15:52
  • 6.51MB
  • 下载

[Ruby] 关于字符串中特殊字符处理\n\t\r 的方法

1.chomp和chomp! 去掉字符串尾部的\n或\r(每次只能处理最后一个字符)         2.chop 和chop! 去掉字符串最后面的一个字符        3.strip和stri...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于/r和/n
举报原因:
原因补充:

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