protobuf序列化之后为二进制数据,数据中可能包含 ‘\0’,直接转换为char *类型会导致发送数据不完整。

解决方法:

void buildProtobufMsg(const string& test,zmq::message_t *msg)

{

if (msg == nullptr)

{

return;

}

Test::ProtoBufData data;

data.set_test(test);


int size = data.ByteSize();

char arr[size];

data.SerializeToArray(arr,size);


msg->rebuild(size);

memcpy(msg->data(),arr,size);

}

 

切记不可将序列化之后的数据转成char * 发送,否则导致数据不完整。

调用:

zmq::message_t msg;

buildProtobufMsg(string("hello“),&msg);

zmqsocket.send(msg);