无法将大的无符号整数正确写入二进制文件 - C++
can't write correctly large unsigned ints to binary file - c++
在我的项目中,我需要写入一个二进制文件顺序无符号整数,每个数字都需要正好 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;
}
并附上我在文件中看到的图像:
file capture on hex editor
谢谢
数字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();
}
在我的项目中,我需要写入一个二进制文件顺序无符号整数,每个数字都需要正好 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;
}
并附上我在文件中看到的图像: file capture on hex editor
谢谢
数字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();
}