通过Qt UDP发送struct

时间:2015-08-04 22:17:50

标签: c++ qt struct

我正在尝试通过QUdpSocket设置双向通信。我试图发送一个由C ++ Eigenvector和double组成的结构。我尝试按如下方式序列化QByteArray

MyStruct toSend;
QByteArray buf;
QDataStream s(&buf, QIODevice::WriteOnly);
if (false) s.setByteOrder(QDataStream::LittleEndian);
std::string vec_str = eigenToStr(toSend.vec);
s << (double)toSend.test1 << QString(vec_str.c_str());

eigenToStr()将特征向量转换为字符串。

但是,我无法在另一端阅读该消息。当我在发送QByteArray之前转换回字符串时,我得到@ffffff。因此,我认为这是QByteArray / QDataStream转化的问题。

我很感激有关如何序列化我的结构的任何建议,以便我可以通过UDP发送它。

谢谢!

1 个答案:

答案 0 :(得分:0)

QByteArray和QDataStream合作非常好:)。如果您真的想将原始数据写入QDataStream,请使用以下方法:

int QDataStream::writeRawData(const char * s, int len)

我个人更喜欢超载&lt;&lt;将用户数据写入QDataStream的方法,例如

QDataStream& operator <<(QDataStream& out,MyStruct & data)

然后代码看起来像:

   MyStruct toSend;
   QByteArray buf;
   QDataStream s(&buf, QIODevice::WriteOnly);
   if (false) s.setByteOrder(QDataStream::LittleEndian);//false ?  
   s << toSend;