当我在C ++上使用ZMQ和来自Google的protobufs进行程序服务器客户端时,触及了与类型差异相关的函数。
问题:函数ParseFromString
和SerializeToString
使用字符串类型作为参数,但我需要使用zmq::message_t
编写程序,例如参数。
Proto file:
package core;
{ message Request
required uint32 id=1;
required uint32 class_id=2;
...}
zmq::message_t msg; // beginning
core::Request reqt;
…
socket.recv(&msg) ;// receiving messgae, socket.recv(reqt) doesn't work
ParseFromString (msg); //serialization to structure doesn’t work
程序是使用套接字执行客户端 - 服务器 需要在彼此之间协调变量字符串类型和消息。 函数ParseFromString()和SerializeToString()。 ВPythonвсепросто: socket.send(reqt.SerializeToString())и 类标识码= reqt.ParseFromString(socket.recv)
答案 0 :(得分:0)
您应该使用ParseFromArray()
:
reqt.ParseFromArray(msg.data(), msg.size());
在序列化方面,使用ByteSize()
获取protobuf消息的大小,为其分配空间,然后SerializeToArray()
将字节写入空间。
有关这些方法及其他方法的完整文档可在以下网址找到:
https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.message_lite