为什么ofstream :: write在文件末尾添加额外的字节?

时间:2019-01-23 06:05:47

标签: c++ c++11 binary hex

我正在尝试将以下字节写入文件

[03 00 01 00 FF 00 00 00 FF 00 00 00 FF]

但我一直将以下字节添加到末尾

[03 01 0F C0 00 08 00 A0 00 C7 00 00 00 02 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]

我已阅读,并被告知在打开文件时使用std::ios::binary,这似乎无济于事。 这是我的代码

#include <fstream> 
#include <iostream>
#include <conio.h>
#include <iomanip>

using namespace std;

int main() {
    int height = 1,
        length = 3;
    int data[] = {
        0x3,0x0,0x1,0x0,
        0xff, 0x0, 0x0,
        0x0, 0xff, 0x0,
        0x0, 0x0, 0xff
    };

    ofstream file("thing.dki", std::ios::binary);
    for(int i = 0; i < sizeof(data); i++) {
        file.write((char*) &data[i], 1);
    }
    file.close();

    return 0;
}

1 个答案:

答案 0 :(得分:2)

尝试添加

using byte = unsigned char;

在代码顶部,然后替换

int data[] 

byte data[]

问题是您已经将其作为整数数据来解决,整数数据的大小可能会因操作系统架构和尾随零而有所不同,但是如果您使用char,则会自动为它分配最低的内存空间。