在我的项目中,我需要按顺序将无符号int写入二进制文件,并且每个数字必须精确地占4个字节,这一点很重要。但是,当我使用十六进制编辑器打开二进制文件时,我看到了这种奇怪的情况:数字被正确地写入,直到9号。在编号10之前,他将添加另一个额外的字节并写入“ 13”(并且已经弄乱了我的文件)。而且奇怪的事情继续发生-从数字30开始,每个字符都会被写成不同的字符。这是为什么?如何解决,至少是尺寸问题?这是我的简单示例代码:
int main()
{
string filename;
cin >> filename;
fstream mystream;
mystream.open(filename, ios::out);
if (mystream)
for (unsigned int i = 0; i < 3200; i++)
mystream.write((char*)&i, sizeof(unsigned int));
mystream.close();
return 0;
}
并附有我在文件中看到的图像:十六进制编辑器中的文件捕获
谢谢
该数字10
是换行符LF,由于在文本模式下打开了文件,因此将其转换为CRLF。
以二进制模式打开文件以处理二进制文件。
#include <iostream>
#include <fstream>
#include <string>
using std::string;
using std::cin;
using std::fstream;
using std::ios;
int main()
{
string filename;
cin >> filename;
fstream mystream;
mystream.open(filename, ios::out | ios::binary); // add OR with ios::binary
if (mystream)
for (unsigned int i = 0; i < 3200; i++)
mystream.write((char*)&i, sizeof(unsigned int));
mystream.close();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句