在Qt中读取二进制文件主要有以下两种方法,结合权威性和时效性信息整理如下:
一、使用QFile和QDataStream
基础操作 - 通过`QFile`打开文件(`QIODevice::ReadOnly`模式),使用`readAll()`或`read()`按需读取数据,`readAll()`会一次性读取整个文件内容到`QByteArray`。
- 示例代码:
```cpp
QFile file("binaryfile.bin");
if (file.open(QIODevice::ReadOnly)) {
QByteArray data = file.readAll();
file.close();
qDebug() << "读取字节数:" << data.size();
} else {
qDebug() << "无法打开文件";
}
```
按偏移量读取
- 使用`QDataStream`结合`QFile`,通过`setOffset()`设置读取位置,使用`read()`按字节数或数据类型读取数据。
- 示例代码:
```cpp
QFile file("binaryfile.bin");
if (file.open(QIODevice::ReadOnly)) {
QDataStream in(&file);
in.setVersion(QDataStream::Qt_5_7);
in >> float duration; // 读取4字节浮点数
in >> quint32 number; // 读取4字节整数
file.close();
}
```
二、按字节处理
直接操作QByteArray
- 读取文件内容到`QByteArray`后,通过指针或索引按字节访问数据,适用于需要精细控制的场景。
- 示例代码:
```cpp
QFile file("binaryfile.bin");
if (file.open(QIODevice::ReadOnly)) {
QByteArray data = file.readAll();
file.close();
memcpy(&duration, data.data() + 162, sizeof(float)); // 假设数据偏移162字节
memcpy(team, data.data() + 166, 81); // 读取81字节字符串
}
```
总结
推荐场景: 优先使用`QFile`和`QDataStream`,代码简洁且类型安全,适合大多数二进制文件读写需求。 特殊需求