Datastream Qt в стандартный код C++

Я создал функцию Qt для чтения в двоичном файле, и она работает.

[код]

    if (fileLoad.open(QIODevice::ReadOnly))
   {
   QDataStream in(&fileLoad);

   quint8 Variable_8bits;
   quint16 Variable_16bits;
   quint32 Variable_32bits;

   in >> Variable_16bits >> Variable_8bits >> Variable_32bits >> ZeroByte;

   qDebug() <<  Variable_16bits << Variable_8bits << Variable_32bits;

   //Works no extreme conversion necessary as i read input with "set size variables"
   // first 16bits, then 8bits, then 32bits
   // and store it correctly for display
   }
   fileLoad.close(); 
   }

Таким образом, в основном я мог читать в двоичном файле, используя переменные разных размеров для доступа к значениям в файле (так как я знаю формат файловой структуры)

Моя проблема в том, что теперь мне нужно создать такую ​​же или похожую функциональность для стандартной функции C++.

Существует ли DataStream, подобный Qt для C++, или мне нужно вручную загружать файл в буфер, затем читать в отдельных байтах, выполнять побитовые манипуляции, чтобы получить правильную длину представления, перед тем, как отобразить значение или, если есть более простой метод...

какой путь вперед...

2 ответа

В стандартном C++ нет функции / класса с функциональностью, аналогичной QDataStream. Пожалуйста, обратите внимание, что QDataStream Класс обеспечивает поддержку нескольких архитектур, он учитывает порядковый номер (по умолчанию подразумевается большой порядковый номер), различные стандарты значений с плавающей запятой, он контролирует размеры встроенных типов. (он также поддерживает интернализацию и экстернализацию некоторых классов Qt, но эта проблема не относится к стандарту C++)
В стандарте C++ все это разнообразие платформ должно обрабатываться вручную (или библиотекой).

Я бы использовал std::ifstream для этого простого варианта использования, представленного ниже.

Однако обратите внимание, что 8, 16 и 32-битные типы были добавлены в стандарт только в C++11 и далее.

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main ()
{
    string line;
    ifstream myfile("example.txt", std::ios::binary);
    uint8_t Variable_8bits; // C++11 and on
    uint16_t Variable_16bits; // C++11 and on
    uint32_t Variable_32bits;  // C++11 and on
    if (myfile.is_open())
    {
        myfile.read(&Variable_16bits, 2);
        myfile.read(&Variable_8bits, 1);
        myfile.read(&Variable_32bits, 4)
        ...

        std::out << Variable_16bits << Variable_8bits << Variable_32bits;
        myfile.close();
    } else {
        cout << "Unable to open file"; 
    }

    return 0;
}
Другие вопросы по тегам