无法将大型无符号整数正确写入二进制文件 - C++

can't write correctly large unsigned ints to binary file - c++

本文关键字:二进制文件 C++ 大型 无符号整数      更新时间:2023-10-16

在我的项目中,我需要向二进制文件中写入连续的无符号整数,每个数字精确地占用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();
}