c++ - 以二进制形式打开文件

标签 c++ byte file-handling

我正在尝试使用 C++ 打开一个文件。该文件可以是任何类型。我要做的是打开存储在内存中的文件。

假设它是一个 1 字节的文本文件,在内存中存储为 10000011 那么我想用 C++ 打开这种格式的文件,就像它在计算机中的存储方式一样。

怎么做?

最佳答案

您可以通过调用 fopen 函数打开二进制格式的文件,例如:

FILE* f = fopen(filename, "rb");

现在你不能一点一点地读取文件,但你必须至少逐字节读取它(因为字节是你应该使用的最小单位),例如:

unsigned char value;
fread(&value, 1, 1, sizeof(unsigned char));

将读取文件的单个字节。然后,您可以通过二进制和操作 (&) 访问单个位,可以像这样将此值打印为二进制(例如 0 和 1):

    printf("%d%d%d%d%d%d%d%d\n", 
           value & 0x80 ? 1 : 0, 
           value & 0x40 ? 1 : 0, 
           value & 0x20 ? 1 : 0, 
           value & 0x10 ? 1 : 0, 
           value & 0x8 ? 1 : 0, 
           value & 0x4 ? 1 : 0, 
           value & 0x2 ? 1 : 0, 
           value & 0x1 ? 1 : 0);

当然这些都是C标准函数,你也可以用C++的,开放使用:

  ifstream file (filename, ios::in|ios::binary);

阅读你可以使用:

  file.read(valueAddress, sizeInBytes);

而且您应该知道如何(使用 cout)打印出这些东西。

关于c++ - 以二进制形式打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15932836/

相关文章:

scala - 如何将 Seq[Byte] 转换为 Array[Boolean] 表示 Scala 中的每一位

c++ - 在 seekg() 上读取文件时崩溃

java - Java android studio 项目中的NoFileFoundException

c++ - c++ move 语义是否在每种情况下都节省了资源?

c# - C# 中的错误 "This stream does not support seek operations"

objective-c - NSMutableData 的 mutableBytes 和 bytes 方法之间的区别

android - 无法在 Android 应用程序中创建文件

c++ - 模板类的继承问题

c++ - 包含来自基于 C 的代码的 C++ header (fstream)?

c++ - new[] 包含构造函数的字节对象数组没有错,对吧?