【问题标题】:Writing/reading binary bytes/ints/longs to/from file stream in C++在 C++ 中向/从文件流写入/读取二进制字节/整数/长整数
【发布时间】:2015-05-05 13:12:15
【问题描述】:

所以我最近才开始尝试 C++,并且已经学习了基础知识。我只想知道如何在文件中写入/读取字节/整数/长整数。

首先,我想告诉你我为什么需要它。基本上我想从一个有特殊格式的文件中读取数据。所有数据都以二进制形式写入该文件中。

File format specification

我已经用另一种语言编写了那个程序,我想用 C++ 重新编写我的程序。我以前使用的语言称为 BlitzMax 并且在该语言中已经实现了功能,并且只是称为 WriteByte、ReadByte、WriteInt、ReadInt 等。如果你们愿意编写(或至少链接我的源代码)我的函数需要,不胜感激。如果您为我编写它们,您能否也解释一下它们是如何工作的?

非常感谢所有帮助我的人! :)

编辑:在这里,根据要求,代码有点符合我的需要。它确实将 int 50 以二进制形式写入文件,但这是我所能做到的。我仍然无法理解某些部分(代码在谷歌中找到,我对其进行了一些编辑)。而且我仍然需要一种写入字节和长整数的方法。

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    int num = 50
    ofstream file("file.txt", ios::binary);
    file.write(reinterpret_cast<const char *>(&num), sizeof(num));
    file.close ();
    return 0;
}

【问题讨论】:

  • 这不是一个“给我codez”的网站。展示你的尝试。
  • 我没有让你把我做成一个完整的程序,我只想找到将二进制写入文件的方法。我对如何制作它有一个非常小的想法,这就是为什么我要求制作代码并解释它是如何工作的。但可以肯定的是,我可以向您展示我到目前为止所做的尝试。我编辑了,看看吧。
  • stackoverflow.com/questions/9244563/…;由于可移植性,有些人可能会建议您不要使用二进制编写

标签: c++ io binary fstream blitzmax


【解决方案1】:

以同样的方式跟随:

int num = 50;
unsigned char x = 9;
float t = 9.0;

ofstream file("file.bin", ios::binary);
file.write(reinterpret_cast<const char *>(&num), sizeof(num));
file.write(reinterpret_cast<const char *>(&x), sizeof(x));
file.write(reinterpret_cast<const char *>(&t), sizeof(t));
file.close ();
return 0;

更多关于reading的信息。

但在进行二进制读/写时要注意可移植性问题。可移植性问题可能与整数在您的机器上可以是 4 个字节并且在其他机器上具有不同大小的事实有关。字节顺序也是另一个问题。编码浮点数是二进制的,也不能移植 (here)。

【讨论】:

  • 非常感谢!你甚至无法想象我寻找解决方案已经有多久了……
  • 由于提到的(可能的)问题,您可能想考虑将这些整数写为文本;你可以搜索那个
  • CS2D(我正在为其编写应用程序的游戏)正在使用该格式,因此取决于该游戏的创建者。但我会尝试为这方面的兼容性问题添加一些检查。但是感谢您的提醒,如果我要编写游戏,将使用文本整数。
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 2017-02-26
  • 1970-01-01
相关资源
最近更新 更多