彻底搞定回车0d和换行0a

441 篇文章 1 订阅
什么是0x0d和0x0a
,可能大部分人都知道是回车和换行字符,但那个是回车,那个是换行?估计很多人都一时说不清楚了---
也许你不相信,那就调查下周围的同事吧,估计会包含以下字眼“大概。我记得。回车是0x0d吧”。这次我移植arm-linux C的程序,至VC++,
发现了很多不同,尤其是这个回车换行浪费我一上午的时间,我决定借此机会彻底搞定他们,
这两个令人讨厌的家伙。   先说下浪费我一上午的那个东西----
教训是很重要的,希望大家不要重蹈我的覆辙----,在arm-linux下,写二进制文件,打开文件的时候 这样写就可
以了fp_wthdisk = fopen(file_pathname,"w");,以w
格式写就可以了。把这段程序移植到vc++后,发现一旦我向文件写入0x0a,前边就会自动加上0x0d
,我以为是我写入数组的问题,反复检查也没有找到毛病,后来同事问我:“你是不是二进制格式写入的文件?”我说:
“是呀,fwrite w格式,没有问题呀”,后来他说,你试试“wb格式写入一下”
,改为wb后,果真就好了,厉害!,我对他竖起了大拇指。  
看到这里,上边促使我下决心搞清楚回车换行的原因说完了。我想可能有人会犯同样错误的。
但如果你对以下几个问题,都知晓了,就不必浪费时间,继续看下去了。   1.在Windows XP Visual C++下,按下回车键,系统获得的字符是0x0d
还是0x0a,还是0x0d和0x0a?
    2.
回车(0x0d)的作用是回到本行的行首位置,表示本行已经输入完毕,停留在最后一个位置,还是光标转移到下一行的起始位置?
    1.的答案是仅获得字符 
0x0d    2.
答案是回车的作用只是移动光标至该行的起始位置    注意:回车和换行在不同环境下的意义不同,正如sleep(1)和Sleep(1
)【注意S大写】这两个函数的不同一样,sleep(1)在linux下表示延时1s,而Sleep(1)在vc++下表
示延时1ms
,如果不依据环境来讨论回车和换行,是无意义的,只能是让人们误入歧途和浪费时间。  
  我只在arm-linux C和vc++
下做了试验,请大家在接触其它语言环境下,小心推广,不行就自己动手做试验,最可靠。在arm-linux C和vc++下回车换行的意义如下。 
  回车 代码:CR ASCII码:\ r ,十六进制,0x0d
,回车的作用只是移动光标至该行的起始位置; 
  换行 代码:LF ASCII码:\ n ,十六进制,0x0a,换行至下一行行首起始位置; 
  Linux和windows下,回车试验 
CODE: 
sprintf(versionbuf,"%s","TEST_VERSION_1_0_11\rabcdefg\r34567\n"); printf("%s",versionbuf);
    均打印输出:34567fgRSION_1_0_11,证明了以上结论。  
  其实回车和换行之所以把大家搞迷糊的一个重要原因,是大家把键盘的 
“回车键”,0x0d表示“回车”,我们在windows
下的txt文件下敲下的回车键等情况搅在了一起。在键盘上敲下回车键,在不同软件下获得字符大有不同。 
   Windows下在
txt文件中敲下回车键,然后16进制观察,你会发现获得了2个字符,0x0d和0x0a,这个大家都知道,但这不意味着,在任何情况下敲下回车键,都会获得0x0d和0x0a。    在linux下,你对一个文件,敲下回车键,你就会发现,它每次只增加一个字符。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值