【问题标题】:Read binary data from PLY file using Qt使用 Qt 从 PLY 文件中读取二进制数据
【发布时间】:2022-01-06 15:01:20
【问题描述】:

我正在尝试从此文件中读取数据:

其中包含以二进制形式存储的 ascii 文本和浮点数。我正在尝试通过执行以下操作来阅读它:

        QTextStream in(file);

        QString line;
        line = in.readLine();
        while (!line.startsWith(QString("element vertex"))) {
            line = in.readLine();
        }
        point_count = line.split(QString(" ")).last().toInt();
        qDebug() << "PC: " << point_count;

        while (line != "end_header") {
            line = in.readLine();
        }

        QDataStream* stream = new QDataStream(file);
        stream->skipRawData(in.pos());
        stream->setFloatingPointPrecision(QDataStream::SinglePrecision);

        float number;
        (*stream) >> number;
        qDebug() << "Float: " << number;

但是我读到-1.98117e+13,我猜是错的,我做错了什么?

【问题讨论】:

  • 你能在in.pos返回的位置用十六进制编辑器检查文件吗?另请注意,默认字节顺序是大端;您需要使用setByteOrder 将其显式设置为小端。
  • 当您想读取二进制数据时,您应该使用 QTextStream 而是使用 QDataStream。
  • 非常感谢@Botje!这就是问题所在,你想写一个答案而不是评论吗?
  • 因为其他人可能会偶然发现这一点,当然。

标签: c++ qt point-clouds


【解决方案1】:

QDataStream 的默认字节顺序是大端;改成小端:

stream->setByteOrder(QDataStream::LittleEndian)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2015-06-27
    • 2015-04-23
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多