【发布时间】:2021-02-01 14:45:05
【问题描述】:
如果您查看 QT 的 documentation。您可以使用 readBytes 或 readRawBytes 从文件中读取二进制数据。在任何情况下我都很舒服,无论是从文件还是流中读取数据。 在 readBytes 的情况下 - 从流中读取缓冲区 s 并返回对流的引用。 如果是 readRawBytes - 从流中读取 L (length) 个字节到 s(buffer char*) 并返回读取的字节数。
void readBinary(QString path)
{
QFile file(path);
if (!file.open(QIODevice::ReadOnly)) {
qDebug() << "Could not open bin file for reading";
return;
}
QDataStream in(&file);
char *data = new char[30];
qint32 bytes = in.readRawData(data, 30);
//in >> data;
qInfo() << "bytes read: " << bytes;
qInfo() << data;
file.close();
}
它没有显示读取的字节数,但没有在屏幕上显示二进制数据。
- 我在这里缺少什么?
- 我们是否需要对二进制数据进行序列化/反序列化?换句话说,数据的编组/解组。因为我已经阅读了官方文档编码/解码,您需要自己处理,并且需要在读取/写入文件中的数据时设置 QT 的版本。
- 我们如何写回文件/流。
- 如果我们有其他方法可以直接从文件中读取/写入数据。
- 我们是否需要将整个二进制数据写入缓冲区然后再次读取?这样我们就可以维护数据的格式。 想从你们那里得到一些答案!
供您参考 - 如下所述考虑文件中二进制数据的 sn-p。
00000000: 0000 0520 a52a 0108 8520 0108 9320 0108 ... .*... ... ..
00000010: 9920 0108 9f20 0108 a520 0108 0000 0000 . ... ... ......
【问题讨论】:
-
您将
data视为一个空终止的char数组,它(可能)不是。尝试将数据读入QByteArray并打印出来。 -
@G.M. readRawData 基本上将输入作为 char *。无法从 QByteArray 转换为 char *。