将零mq消息数据获取到std::vector<char>

Get zeromq message data into std::vector<char>

本文关键字:lt mq char gt 消息 vector std 将零 数据获取      更新时间:2023-10-16

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

您可以执行以下操作。

zmq::message_t request;
socket.recv (&request);
std::string msg_str(static_cast<char*>(request.data()), request.size());

然后将字符串存储在向量中。这将更容易处理。。。

std::vector<std::string> strVec;
strVec.push_back(msg_str);