如何从 QByteArray 获取结构
Posted
技术标签:
【中文标题】如何从 QByteArray 获取结构【英文标题】:how to get structure from QByteArray 【发布时间】:2014-07-16 15:04:40 【问题描述】:我有一个 C# 中的 TCP 通信应用程序和其他在 linux 上的 C++ Qt 程序
但在通信后,我从 C++ QByteArray 中的 C# 应用程序获取数据。 现在需要将 QByteArray 转换回 struct
如何在 QT 的 my_struct 中获取数据。 我用过
QDataStream in(&data, QIODevice::ReadOnly);
int parID;
QString parMessage;
in >> parID >>parMessage;
或
const my_struct* my_struct = reinterpret_cast<const my_struct* >(data.constData());
// display
qDebug() << " id :"<<my_struct->id<< " msg: "<< my_struct->msg;
struct my_struct
int id;
string msg;
【问题讨论】:
【参考方案1】:QDataStream 使用自己的序列化/反序列化格式。看起来您的数据没有使用 QDataStream 序列化。要解决这个问题,您可以在 json/xml/etc 中发送数据。
【讨论】:
这不太正确。QDataStream
当然使用它自己的简单格式来处理复杂的 Qt 数据类型。对于简单的类型,例如数值类型,实际上没什么大不了的:您选择字节顺序就可以了。【参考方案2】:
这取决于它是如何发送的。您需要确定双方的格式才能正确沟通。
发送字符串很棘手,你最好的办法是发送字符串的长度(作为 32 位未指定的 int),然后发送数据(以 utf8 格式),当你阅读时,你可以这样做
char* s;
int length;
in.readData(s, length);
QString str = QString::fromUtf8(s, length);
delete[] s;//free the allocated buffer
【讨论】:
以上是关于如何从 QByteArray 获取结构的主要内容,如果未能解决你的问题,请参考以下文章
关于QT C++ 在debug 模式和Release模式下对QByteArray赋值的差异化实践记录