我正在读取一个由传感器产生的二进制文件。我在读取不同精度(32位或64位)的浮点数时遇到了问题。我可以在MATLAB(64位版本)中读取它们,但是在Windows上的Qt(32位版本)却给出错误的值。我可以读取到
我已经检查了字节数,它们是正确的。我认为问题在于机器精度。
如果我漏掉了任何细节,请告诉我。
编辑:
阅读文件:
提前感谢您。
dtmth
(请参考下面的结构)。之后,我得到了baseline
的Inf
值。实际上,这个值应该是0
。如您所见,我改变了MSB(LittleEndian)。如果我保持BigEndian,则基线为0
,但其他值则是错误的。我的桌面是64位的。我已经检查了字节数,它们是正确的。我认为问题在于机器精度。
QDataStream in(&file);
in.setByteOrder(QDataStream::LittleEndian);
params p;
in >> p.filetype;
in >> p.projectid;
in >> p.datamin;
in >> p.dtyear;
in >> p.dtmth;
in >> p.baseline;
in >> p.startfrequ;
其中p被定义为一个结构体:
struct params
{
quint8 filetype;
quint16 projectid;
double datamin;
quint16 dtyear;
quint8 dtmth;
float baseline;
double startfrequ;
};
我可以在MATLAB中读取它们。我的MATLAB是64位版本,其中我按以下方式读取数据类型:
MATLAB:
uint8 filetype;
uint16 projectid;
float64 datamin;
uint16 dtyear;
uint8 dtmth;
float32 baseline;
float64 startfrequ;
如果我漏掉了任何细节,请告诉我。
编辑:
阅读文件:
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QString(),
tr("Raw Files (*.msr);;All files (*.*)"));
if (!fileName.isEmpty()) {
qDebug("Attempting to open file..");
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly)) {
QMessageBox::critical(this, tr("Error"), tr("Could not open file"));
return;
}
QDataStream in(&file);
提前感谢您。
datamin
吗? - UmNyobe