收到如此收到的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));
没用。任何人都可以提供有关如何实现这一目标的建议吗?
答案 0 :(得分:2)
它无效的原因是因为您似乎没有将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));
答案 1 :(得分:1)
您可以执行以下操作。
zmq::message_t request;
socket.recv (&request);
std::string msg_str(static_cast<char*>(request.data()), request.size());
然后将字符串存储在vector中。处理起来会容易得多......
std::vector<std::string> strVec;
strVec.push_back(msg_str);