C++文件流ios::binary的作用

在创建文件流时,可以显示指定它的打开方式为ios::binary,也就是以二进制方式打开。但是,无论是否指定二进制方式打开文件,读写的最小单位都是字节。那么,它到底起到什么作用呢?以二进制方式打开与普通打开方式的区别是什么?

实际上,二者最大的区别在于对换行符的处理方式不同。由于历史原因,Windows操作系统是用两个字符(\r\n)来表示换行符的;而Unix操作系统却是用单个字符(\n)来表示换行符的。因此,在创建文件流时,如果指定了以ios::binary方式打开,那么换行符就是单字符的;否则,就采用Windows操作系统的双字符。下面用一个简单的例子来观察一下,代码比较简单,注意两种情况仅仅是写入文件时一个采用二进制方式,一个采用默认的方式。

// BinaryIo.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <fstream>

int _tmain(int argc, _TCHAR* argv[])
{
	std::ofstream out("file.txt");
	//std::ofstream out("file.txt", std::ios::binary);
	out<<"test\n";
	out.close();
	std::ifstream in("file.txt", std::ios::binary);
	char c;
	while((c = in.get()) != EOF) {
		if (c == '\r') {
			printf("%s", "\\r");
		} else if (c == '\n') {
			printf("%s", "\\n");
		} else {
			printf("%c", c);
		}
	}
	in.close();
	return 0;
}

第一种情况的结果为:

test\r\n请按任意键继续. . .

第二种情况的结果为:

test\n请按任意键继续. . .

两种情况的区别一目了然,因此我们可以简单总结成:以ios::binary方式打开,换行符被解释成\r\n;反之,换行符被解释成\n。

另外一个问题是在Unix(或类Unix)操作系统中,指定和不指定ios::binary方式是否有区别呢?也就是说这种差异是否仅仅体现在Windows操作系统中。博主没有测试环境,希望有条件的同学能够帮忙测试下,分享一下结果,谢谢。

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`std::ios::binary` 是 C++ 中用于打开文件的打模式之一。 在打开文件时,可以通过指定 `std::ios::binary` 打开模式来确保以二进制模式读取或写入文件。这种模式对于处理二进制文件(例如图像、音频或视频)非常有用,因为它可以确保文件以二进制格式进行读写,而不会对数据进行任何额外的转换或处理。 以下是一些使用 `std::ios::binary` 的示例: ```cpp #include <iostream> #include <fstream> int main() { // 以二进制模式写入数据到文件 std::ofstream outputFile("data.bin", std::ios::binary); if (outputFile) { int data[] = { 1, 2, 3, 4, 5 }; outputFile.write(reinterpret_cast<const char*>(data), sizeof(data)); outputFile.close(); std::cout << "Data written to file." << std::endl; } else { std::cout << "Failed to open file for writing." << std::endl; } // 以二进制模式读取文件中的数据 std::ifstream inputFile("data.bin", std::ios::binary); if (inputFile) { int data[5]; inputFile.read(reinterpret_cast<char*>(data), sizeof(data)); inputFile.close(); std::cout << "Data read from file: "; for (int i = 0; i < 5; i++) { std::cout << data[i] << " "; } std::cout << std::endl; } else { std::cout << "Failed to open file for reading." << std::endl; } return 0; } ``` 在上面的示例中,我们首先以二进制模式将一些整数数据写入到名为 "data.bin" 的文件中,然后再以二进制模式从文件中读取数据并显示在控制台上。 通过指定 `std::ios::binary` 打开模式,我们可以确保数据以二进制形式进行读写,而不会进行任何额外的转换或处理。 希望这能帮助您理解 `std::ios::binary` 在C++中的使用。如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值