【问题标题】:Writing integer to binary file using C++?使用 C++ 将整数写入二进制文件?
【发布时间】:2012-03-03 21:54:39
【问题描述】:

我有一个非常简单的问题,这对我来说很困难,因为这是我第一次尝试使用二进制文件,但我不太了解它们。我要做的就是将一个整数写入二进制文件。

我是这样做的:

#include <fstream>
using namespace std;
int main () {
    int num=162;
    ofstream file ("file.bin", ios::binary);
    file.write ((char *)&num, sizeof(num));
    file.close (); 
    return 0;
}

如果我做错了什么,你能告诉我吗?

给我带来麻烦的部分是file.write,我不明白。

提前谢谢你。

【问题讨论】:

  • 有效吗?它与您的预期有何不同?
  • Nitpick 建议:1) 说 reinterpret_cast&lt;const char *&gt;(&amp;num),并省略 file.close()return 0,因为所有这些都是自动发生的。
  • @KerrekSB 你能解释一下 reinterpret_cast(&num) 的作用吗?
  • 它将&amp;num 的类型转换为const char *,类似于您当前的演员表,但与粗略的C 演员表相比,它是一种更深思熟虑的方式来编写您想要的内容。这只是风格和技巧的问题,但您应该习惯于在 C++ 中准确地说您想要什么。
  • @KerrekSB:是的,是的。当您不假思索地打字时,就会发生这种情况。为了我的辩护,你可以改写这样的句子:“...,据我所知只有一些编译器...”,标记的短语是'as far as I'的同义词知道”。

标签: c++ binary integer fstream


【解决方案1】:

给我带来麻烦的部分是file.write,我没有 明白了。

如果您阅读ofstream.write() 方法的文档,您会看到它需要两个参数:

  1. 一个指向数据块的指针,其中包含要写入的内容;

  2. 一个整数值,表示此块的大小(以字节为单位)

此声明只是将这两条信息提供给ofstream.write()

file.write(reinterpret_cast<const char *>(&num), sizeof(num));

&amp;num 是数据块的地址(在这种情况下只是一个整数变量),sizeof(num) 是这个块的大小(例如,在 32 位平台上为 4 个字节)。

【讨论】:

  • 这里的重要提示:它从内存中写入数据,因为它存储在那里,生成的二进制文件在具有不同字节序的机器上将不可读。
  • @Mikolasan 我怎样才能使二进制文件在不同的机器上可读?
  • @thatGuy 你的代码应该在正在运行的机器上检查what endianness,如果它与二进制文件格式不同,则convert读取后或写入前的数据,否则读取/写入并使用它是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 2017-01-26
  • 1970-01-01
相关资源
最近更新 更多