将零mq消息数据获取到std::vector<char>
Get zeromq message data into std::vector<char>
给定收到的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);
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何显式调用运算符<<
- 零MQ 后台线程创建
- 如何获取零MQ时间戳?
- 获取 IBM WebSphere MQ 版本的 API?
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 具有C++绑定和开放 MP 阻塞问题的零 MQ.为什么
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 无法从零MQ ZMQ_SERVER套接字中获取文件描述符
- 多线程应用程序中的零MQ处理中断
- 无法正确安装 ZeroMQ / 0mq / ØMQ