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 ++ все это разнообразие платформ должно обрабатываться вручную (или библиотекой).

0

Другие решения

я хотел бы использовать станд :: 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;
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector