序列化的 Protobuf 有空字节,不能被 ZMQ 发送
Serialized Protobufs have nullbyte and cannot be sent by ZMQ
我目前正在尝试使用 zmq 发送一些 protobuf,到目前为止效果很好。现在我启动了一个不同的(并且更复杂的)protobuf,它停止工作了。
我已经发现了错误,即 protobuf 对象的反序列化创建了一个包含空字节的字符串 [=10=]
。
编辑:
我想我已经找到原因了。在 zmq_send
中有一行,其中 memcpy
被调用。由于 [=10=]
之后的所有内容都应该不可访问,因此我得到一个错误。还是不知道怎么办。
到目前为止我还没有想出解决这个问题的方法,你们有什么想法吗?
请显示代码。目前尚不清楚您做什么以及期望得到什么。 protobuf 和 zmq 都没有绑定到 ASCIIZ。以下示例序列适用于 protobuf 结构 pb
中的任何类型的数据
reqSize = pb->ByteSize();
reqBuf = new char [reqSize];
pb->SerializeToArray(reqBuf, reqSize);
zmq_send(zc, reqBuf, reqSize, 0);
我目前正在尝试使用 zmq 发送一些 protobuf,到目前为止效果很好。现在我启动了一个不同的(并且更复杂的)protobuf,它停止工作了。
我已经发现了错误,即 protobuf 对象的反序列化创建了一个包含空字节的字符串 [=10=]
。
编辑:
我想我已经找到原因了。在 zmq_send
中有一行,其中 memcpy
被调用。由于 [=10=]
之后的所有内容都应该不可访问,因此我得到一个错误。还是不知道怎么办。
到目前为止我还没有想出解决这个问题的方法,你们有什么想法吗?
请显示代码。目前尚不清楚您做什么以及期望得到什么。 protobuf 和 zmq 都没有绑定到 ASCIIZ。以下示例序列适用于 protobuf 结构 pb
中的任何类型的数据reqSize = pb->ByteSize();
reqBuf = new char [reqSize];
pb->SerializeToArray(reqBuf, reqSize);
zmq_send(zc, reqBuf, reqSize, 0);