将zeromq消息数据获取到std :: vector <char> </char>

时间:2014-11-08 18:42:40

标签: 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));

没用。任何人都可以提供有关如何实现这一目标的建议吗?

2 个答案:

答案 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);