首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用msgpack通过zeromq发送向量

用msgpack通过zeromq发送向量
EN

Stack Overflow用户
提问于 2013-04-09 09:13:37
回答 1查看 3.5K关注 0票数 3

我似乎无法发送通过msgpack通过vector序列化的structstruct

,它是这个结构的一个向量:

代码语言:javascript
复制
struct MyData
{
    MyData() : id(0), x(0), y(0), a(0) {}
    MyData(const Obj &r) : id(0), x(r.pose[0]), y(r.pose[1]), a(r.pose[2]) {}
    MyData(const Obj *r) : id(0), x(r->pose[0]), y(r->pose[1]), a(r->pose[2]) {}
    double id;
    double x;
    double y;
    double a;
    MSGPACK_DEFINE(id, x, y, a);
};

发送端的

datastd::vector<MyData>

代码语言:javascript
复制
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.data(), sizeof(char *) * sbuf.size(), NULL, NULL);
local_socket->send(msg); // this is just zeromq's send function

我的sbuffermessage_t构造错误了吗?

接收端的

我不确定我是否应该转换msg.data(),但是我找不到任何关于如何使用ZeroMQ和messagepack的好文档。

代码语言:javascript
复制
message_t msg;
server_socket->recv(&msg);

msgpack::unpacked unpacked;
msgpack::unpack(&unpacked, reinterpret_cast<char*>(msg.data()), msg.size());
msgpack::object obj = unpacked.get();

std::vector<MyData> data;
obj.convert(&data);
printf("size %d\n", data.size());

我得到以下错误:

在引发“msgpack::type_error”实例后调用终止 what():std::bad_cast中止

我很感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-09 09:45:57

这似乎对我起了作用:

代码语言:javascript
复制
msgpack::sbuffer sbuf;
msgpack::pack(sbuf, data);
zmq::message_t msg(sbuf.size());
memcpy(msg.data(), sbuf.data(), sbuf.size());
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15897935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档