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