给定收到的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));

07-27 20:07