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

时间:2016-04-13 23:51:11

标签: c++ size binaryfiles unsigned-integer

在我的项目中,我需要写入二进制文件顺序无符号整数,重要的是每个数字都需要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

感谢

1 个答案:

答案 0 :(得分:1)

数字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();
}