【发布时间】:2015-12-25 21:04:49
【问题描述】:
我将以下数据区域读入 QDataStream 对象:
DE 07 05 19 0E 28 1A
这应该转换为日期/时间:25-05-2014 15:40:26
我正在尝试使用以下内容将其读入 QDateTime 变量:
QFile fileIn(iFile);
if (!fileIn.open(QIODevice::ReadOnly)) return;
QDataStream data(&fileIn);
data.setByteOrder(QDataStream::LittleEndian);
data.setVersion(QDataStream::Qt_5_0);
data.skipRawData(32);
.
.
QDateTime time;
data >> time;
qDebug () << time.date();
相反,我及时得到空/空白。 输出是:
QDate("")
【问题讨论】:
-
数据是如何创建的?你能举一个序列化日期然后反序列化它的最小例子吗?
-
我无法举例说明数据是如何序列化的,因为我正在对这些数据进行逆向工程。我将用我的更多代码修改问题。
-
数据是否使用 QDataStream/它的协议进行序列化?如果没有,使用 QDataStream 是没有意义的。
-
但是你是怎么得到
DE 07 05 19 0E 28 1A的呢? -
事实上,通过
QDataStream对qint16进行序列化“只是”将其内容写为两个字节(在给定的字节序中)。这与使用相同的任何其他东西几乎兼容。但是QDateTime的序列化是way more complicated 并且非常特定于Qt。除非您生成具有相同语义的字节,否则您无法使用QDataStream将它们读回(Qt 怎么会知道流中字节的含义?)。给定作者语义“正确”反序列化,然后重新组装QDateTime。
标签: qt qdatetime qdatastream