Не удается прочитать .blk файл C ++ (Visual Studios)? - PullRequest
0 голосов
/ 08 июня 2019

для моего проекта у меня есть файл .blk, содержащий строки двоичных данных.И я хотел бы прочитать этот файл, но я получаю пустую строку, когда я coutout файл.** Когда я импортирую файл .blk, в Visual Studios этот файл уже отображается в шестнадцатеричном формате: 00 00 FF 91 FD 00. Любая помощь приветствуется, спасибо!

Я попытался просмотреть Google и StackOverflow, ноничего не совсем то, что я ищу.Я попытался "cout << hex", чтобы увидеть, что я получаю, но, как упоминалось ранее, я не получаю что-то вроде: 00 00 FF 81 FD 00. ** Не уверен, что это будет иметь значение, но я импортировал .blkфайл в мои исходные файлы на Visual Studios. </p>

    char data;//changed the datatype to different ones [string, int, char, float]

    fin.open("data.blk");
    if (!fin.is_open())
    {
    cout << "cannot open file" << endl;
    }
else{
    fin >> data;}

    while (fin)
    {
        cout << hex << data << endl;
        fin >> data;
    }
}

Я ожидаю, что выход будет в шестнадцатеричном формате из файла: B7 E0 00 00 FF 81 80 05 FD ED ...

1 Ответ

0 голосов
/ 12 июня 2019

Итак, после многочисленных изменений на следующий день, я просто хотел держать вас в курсе, ребята, что я смог разобраться.

Несколько моих ошибок было:

- способ чтения файла (VS имеет определенный стандарт при добавлении файла в каталог)

- поскольку файл в двоичном формате, синтаксис чтения файла -> fin.open("data.blk", ios::binary);

- когда вы хотите двоичный файл в шестнадцатеричном формате, синтаксис -> cout << hex << (binary integer)

Ниже мой готовый продукт со всеми исправленными ошибками:

    //READ FILE
fin.open("data.blk", ios::binary);

//CHECK IF THE FILE IS READ
if (!fin)
{
    cout << "Cannot open file" << endl;
}
else
{
    //OBTAIN FILE SIZE
    fin.seekg(0, ios::end);
    int file_size = (fin.tellg());

    fin.seekg(0, ios::beg);

    uint16_t* data = new uint16_t[file_size];//ALLOCATE MEMORY TO STORE UNSIGNED 16 BIT INTEGERS <- groups the binary in groups of 4

    fin.read((char*)data, file_size);//stores file data into data

    for (int i = 0; i < file_size / 2; i++)
    {
        cout << setfill('0') << setw(4) << hex << data[i] << " " << endl;//setfill('0') and setw(4) fills the hex values to have 4 characters or 8 bits in display
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...