you*_*ate 12 c++ io binary file
我有一些结构要写入二进制文件。例如,它们由来自 cstdint 的整数组成uint64_t。有没有办法将它们写入二进制文件,而不需要我手动将它们拆分为数组char并使用fstream.write()函数?
我天真的想法是 C++ 会发现我有一个二进制模式的文件,<<并将整数写入该二进制文件。所以我试过这个:
#include <iostream>
#include <fstream>
#include <cstdint>
using namespace std;
int main() {
fstream file;
uint64_t myuint = 0xFFFF;
file.open("test.bin", ios::app | ios::binary);
file << myuint;
file.close();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,这将字符串“65535”写入文件。
我可以以某种方式告诉 fstream 切换到二进制模式,例如如何使用 更改显示格式<< std::hex?
如果上面的所有内容都失败了,我需要一个将任意 cstdint 类型转换为 char 数组的函数。
我并不真正关心字节顺序,因为我会使用相同的程序来读取它们(在下一步中),所以它会抵消。
YSC*_*YSC 11
是的,你可以,这std::fstream::write是为了:
#include <iostream>
#include <fstream>
#include <cstdint>
int main() {
std::fstream file;
uint64_t myuint = 0xFFFF;
file.open("test.bin", std::ios::app | std::ios::binary);
file.write(reinterpret_cast<char*>(&myuint), sizeof(myuint)); // ideally, you should memcpy it to a char buffer.
}
Run Code Online (Sandbox Code Playgroud)