【发布时间】:2017-09-18 15:57:00
【问题描述】:
我正在努力通过 Qt 中的 QFile 将 struct 写入文件。
typedef struct {
uint32_t timestamp;
uint32_t recordType;
uint32_t payloadLength;
char* payload;
} DataPacket;
DataPacket 结构在其他地方填充:
QString dataString = "$GPGSA,M,3,03,23,22,19,17,01,09,31,12,,,,1.9,0.9,1.6*3D";
DataPacket p;
memset(&p, 0, sizeof(DataPacket));
p.timestamp = now();
p.recordType = 1;
QByteArray arr = dataString.toLatin1();
p.payloadLength = arr.count();
p.payload = arr.data();
// Write the data to a log file
QFile f;
f.setFileName(outputFile);
bool ok = f.open(QIODevice::WriteOnly);
if (ok) {
f.write((char *)&p, sizeof(DataPacket));
f.close();
}
当我检查outputFile 日志文件时,找不到$GPGSA... 字符串。如果我再单独写payload字段:
if (ok) {
f.write((char *)&p, sizeof(DataPacket));
f.write(p.payload, p.payloadLength);
f.close();
}
$GPGSA 字符串随后被正确写入。
我错过了什么......
【问题讨论】:
-
sizeof(DataPacket)仅包含整数成员和指针,没有实际字符串。尝试使用 Qt 序列化,但首先将char*替换为QString。一个成员一个成员的 Qt 序列化就是你所需要的:doc.qt.io/qt-5/qdatastream.html -
试试这个: const char * str = dataString.toStdString().c_str(); QByteArray arr= QByteArray::fromRawData(str,sizeof(str));
-
你解决了我的问题吗?