c++ - 获取 zeromq 消息数据到 std::vector<char>

标签 c++ blob zeromq

给定一条收到的 zeromq 消息:

zmq_msg_t messageIn;
int rc = zmq_msg_init(&messageIn);
rc = zmq_msg_recv(&messageIn, socket, 0);

我想访问传入的消息数据并将其存储到;

std::vector<char> inMsg;

试试这个;

std::memcpy(&inMsg, zmq_msg_data(&messageIn), zmq_msg_size(&messageIn));

没用。任何人都可以就如何实现这一目标提出建议吗?

最佳答案

它不起作用的原因是因为您似乎没有将 vector 的大小调整为要复制到其中的数据的容量。它也不起作用,因为您将 vector 对象的地址传递给 memcpy 而不是 vector 的数据地址存储。 vector 对象通常只包含两个指针,指向它管理的存储的开始和结束。您想要访问的是指向该存储的指针,您可以使用 &inMsg[0] 或在 C++11 inMsg.data() 中获取它。

所以尝试:

std::vector<char> inMsg(zmq_msg_size(&messageIn));
std::memcpy(inMsg.data(), zmq_msg_data(&messageIn), zmq_msg_size(&messageIn));

关于c++ - 获取 zeromq 消息数据到 std::vector<char>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26820715/

相关文章:

c++ - 使用重载删除删除对象之前的 NULL 检查

c++ - uint8_t、uint_fast8_t 和 uint_least8_t 之间的区别

c++ - 为什么不从构造函数中推断模板参数?

triggers - sqlite3 触发器将十六进制文本转换为等效的二进制 blob

ZeroMQ,ROUTER - DEALER,向所有人发送消息

c - 使用 ZeroMQ 发现服务

c++ - Boost多边形库 bool 函数计算时间

c# - 如何使用 MySQL 和 C#(MySQL 连接器)正确处理大 blob

java - 在 HSQLDB 中将图像添加为 BLOB 但类似 ":hsqll:jdbc:client@f3t5h"的内容最终出现在表中

zeromq - 为什么 zmq ( inproc ://)-connection's order matters, 不同于 ( tcp ://)?