Почему ofstream :: write добавляет дополнительные байты в конец файла? - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь записать следующие байты в файл

[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 голосов
/ 23 января 2019

Попробуйте добавить

using byte = unsigned char;

в верхней части кода, а затем заменить

int data[] 

с

byte data[]

проблема в том, что вы уже обратились к ним как к целочисленным данным, которые могут иметь различный размер в зависимости от архитектуры вашей ОС и конечных нулей, но если вместо этого вы используете char, ему автоматически выделяется минимально возможное пространство памяти.

...