我正在尝试通过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发送它。
谢谢!
答案 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;