我创建了函数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的DataStream for C ++ 或者我必须手动将文件加载到缓冲区, 然后读入单个字节, 做按位操作以获得正确的表示长度, 在我显示值之前 或者如果有更简单的方法...
前进的道路......
答案 0 :(得分:0)
我会使用std::ifstream来表示如下的简单用例。
但请注意,8, 16, and 32 bit types仅添加到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;
}
答案 1 :(得分:0)
在标准C ++中,没有功能/类具有与QDataStream类似的功能。
请注意,QDataStream
类为多个体系结构提供支持,它考虑了endians(默认情况下假定为大端),不同的浮点值标准,它控制了类型的构建大小。 (它还支持一些Qt类的内化和外化,但这个问题不适用于标准C ++)
在标准C ++中,所有这些平台多样性都必须手动处理(或通过库)。