C/C++输出流写文件的一点误区

先看下面的代码:

#include <fstream>
#include <windows.h>
using namespace std;

int main(int argc, char* argv[])
{
 ofstream of;
 of.open("d://temp");//文件temp
WORD a = 0x1234;

 of.write((char*) &a, sizeof(WORD));
 of.close();
}
 最后写入文件的结果是:34 12

如果把WORD a = 0x1234;改为WORD a = 0x0a34;

输出的结果是:34 0d 0a

为什么不是34  0a 而是34 0d 0a

因为of.open("d://temp");是默认按字节流来打开文件,而微软操作系统下对字节 0a 换行(/n)会处理成

0d 0a回车换行(/r/n),所以结果是34 0d 0a。

解决办法是:用二进制流来打开文件即,

of.open("d://temp",ios_base::out | ios_base::binary);

(经过实践发现C语言下的fopen等文件处理函数和上面的一样)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值