将fwrite转换为C++类型代码写入二进制文件
Convert fwrite to C++ type code to write binary files
我正在尝试将 C 样式文件 IO 转换为 C++ 样式文件 IO。我需要将数字 42 写成一个 4 字节的有符号整数。
这是我尝试过的有效 C 类型 IO 的示例
#include <stdio.h>
#include <string>
#include <fstream>
using namespace std;
int main()
{
FILE *myFile;
myFile = fopen ("input_file.dat", "wb");
int magicn = 42;
fwrite (&magicn, sizeof(magicn), 1, myFile);
fclose (myFile);
return 0;
}
我正在尝试根据我提出的另一个问题 () 的建议将上述代码转换为 C++ 类型 IO。
这是我的尝试:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
ofstream myFile ("input_file.dat", ios::binary);
int magicn = 42;
myFile << setw(sizeof(magicn)) << magicn;
myFile.close();
return 0;
}
但是,当我使用 'xxd -b input_file.dat' 命令时,我期望的输出是不一样的。
我期望的输出是(使用 C 类型 IO 代码生成)
0000000: 00101010 00000000 00000000 00000000 *...
但我看到了(由我尝试使用 C++ 类型的 IO 代码生成)
0000000: 00100000 00100000 00110100 00110010 42
正在寻找解决方案。感谢您的帮助!
myFile.write(reinterpret_cast<char*>(&magicn), sizeof(magicn));
您当前的方法更像是 fprintf(myFile, "%d", magicn)
。也就是说,它对流执行格式化插入,因此您最终得到第 42 个 ASCII 字符的 ASCII 码。
fwrite
的类似物是 ostream::write
。只需查看 ostream
的可用成员即可了解您可以使用它做什么。
我正在尝试将 C 样式文件 IO 转换为 C++ 样式文件 IO。我需要将数字 42 写成一个 4 字节的有符号整数。
这是我尝试过的有效 C 类型 IO 的示例
#include <stdio.h>
#include <string>
#include <fstream>
using namespace std;
int main()
{
FILE *myFile;
myFile = fopen ("input_file.dat", "wb");
int magicn = 42;
fwrite (&magicn, sizeof(magicn), 1, myFile);
fclose (myFile);
return 0;
}
我正在尝试根据我提出的另一个问题 (
这是我的尝试:
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
ofstream myFile ("input_file.dat", ios::binary);
int magicn = 42;
myFile << setw(sizeof(magicn)) << magicn;
myFile.close();
return 0;
}
但是,当我使用 'xxd -b input_file.dat' 命令时,我期望的输出是不一样的。
我期望的输出是(使用 C 类型 IO 代码生成)
0000000: 00101010 00000000 00000000 00000000 *...
但我看到了(由我尝试使用 C++ 类型的 IO 代码生成)
0000000: 00100000 00100000 00110100 00110010 42
正在寻找解决方案。感谢您的帮助!
myFile.write(reinterpret_cast<char*>(&magicn), sizeof(magicn));
您当前的方法更像是 fprintf(myFile, "%d", magicn)
。也就是说,它对流执行格式化插入,因此您最终得到第 42 个 ASCII 字符的 ASCII 码。
fwrite
的类似物是 ostream::write
。只需查看 ostream
的可用成员即可了解您可以使用它做什么。