2

我创建了函数 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++ 函数相同或相似的功能。

是否有类似 Qt for C++ 的 DataStream 或者我必须手动将文件加载到缓冲区中,然后读取单个字节,进行按位操作以获得正确的表示长度,然后再显示值或者是否有更简单的方法......

前进的方向是什么...

4

2 回答 2

1

在标准 C++ 中,没有与QDataStream功能类似的函数/类。请注意,QDataStream类提供了对多种架构的支持,它考虑了字节(默认情况下假定为大字节序)、不同的浮点值标准,它控制了内置类型的大小。(它还支持一些 Qt 类的内部化和外部化,但这个问题不适用于标准 C++)
在标准 C++ 中,所有这些平台多样性都必须手动(或通过库)处理。

于 2014-01-10T10:11:48.083 回答
0

对于这个简单的用例,我会使用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;
}
于 2014-01-10T10:08:50.297 回答