Windows/DOS与Unix文件格式之间的相互转换

Windows/DOS与Unix文件格式之间的相互转换(/r/n问题)

       Windows/DOS与Unix文件格式是不同的,问题一般就是出在/r/n问题上。回车(CR)和换行(LF)符都是用来表示“下一行”的。而标准没有规定要使用哪一个。于是产生了三种不同的用法:Dos和windows采用回车+ 换行(CR+LF)表示下一行(亦即所谓的PC格式)。UNIX采用换行符(LF)表示下一行,MAC机采用回车符(CR)表示下一行。当在不同的系统间传递文件,就要涉及格式的转换。

先搞清楚几个符号
*******************
0A   LF   换行
0D   CR   回车
*******************

DOS/Windows文本文件中使用CR(回车/r)和 LF(换行/n),
在文件的行尾的情况是是 '/r/n'

UNIX文本只使用换行符,在行的末尾有一个换行(/n),也就是'/n'
所以在windows下编辑的C程序放在unix下编译会出现"No end of newline"的Warning

两种文件格式之间的转化
Unix -> Dos
'/n' -> '/r/n'

  ------------------------------------------------------------------------------------    
        while ( (ch = fgetc(in)) != EOF )
        {
            if ( ch == '/n' )
                putchar('/r');
            putchar(ch);
        }

只要在Unix文件中出现的'/n'的之前加入一个'/r'字符就可以了

==============================

Unix <- DOS
'/n' <- '/r/n'

从Dos到Unix的情况复杂点,不能只是把从文件中读出的'/r'去掉就可以了
因为Dos文件中的文本行的末尾有时会内嵌一个回车符号,这种情况在击打式打印机中出现。
所以在转换前要判断'/r'是否和'/n'同时出现。
如果同时出现,则去掉'/r'
如果没有同时出现,保留'/n'

============================================     
        cr_flag = 0;    /* No CR encountered yet */
        while ( (ch = fgetc(in)) != EOF )
        {
            if ( cr_flag && ch != '/n' ) {
                /* This CR did not preceed LF */
                putchar('/r');
            }
            if ( !(cr_flag = (ch == '/r')) )
                putchar(ch);
        }

---

下面是在安装Cygwin所面临的默认文件格式选择的问题

Text File Type

Unix
No line translation done;all files opened in binary mode.
Files on disk will have LF line endings.

Dos
Line endings will be translated from unix(LF) to Dos(CR-LF)
on write and vice versa onread.

当你在windows上打开一个unix文件格式的文本时,UltraEdit会提示你要不要将其转换为Dos格式的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值