protobuf不同语言间交换的问题

Jooooooker 发布于 2012/10/28 21:22
阅读 1K+
收藏 0

碰到一个非常奇怪的情况,一个protobuf的序列化过的字符串,放在std::string中,然后获取它的MD5,并且把它反序列化,成功,没问题~

然后我把这个string输出到标准输出,并用管道传递给一个python脚本,脚本先计算字符串的MD5,和之前C++程序中的MD5匹配,但是我用这个string在Python中反序列化的时候就出错,提示

DecodeError: Truncated message.

C++和python中使用的文件都是用同一个protoc在同一次生成的文件(.h, .cc, .py)。。。

难以理解。。求大牛相助折腾很久了

加载中
0
NoahX
NoahX

一般自动生成的不会出问题,还是要检查一下你的传输数据的方式。如果你觉得实在有问题。可以在C++中把byte数据(数字数组)打印出来,手动在python的定义,让程序去解如果没有问题,出明问题出在数据传输上,比如编码、控制符等

Jooooooker
Jooooooker
回复 @钟华 : 如果是一个proto文件产生的 编码肯定没问题。不知道你是通过什么传输二进制的呢?
钟华
钟华
回复 @Jooooooker : 您好,我python给c++(utf-8)传送二进制时也存在解码不成功的问题,是我python(ASCii)这边的编码问题吗???
Jooooooker
Jooooooker
回复 @钟华 : 算是解决了吧。。。有两个问题 一个是存储系统会弄错数据,这个是别人问题。还有一个是我自己问题,我在socket传输的时候发送的东西是按\0截断了 而我发的一部分又是序列化之后的裸二进制数据,所以才不能正确的反序列化。。脑残了
钟华
钟华
回复 @Jooooooker : 你好,你这个问题解决了吗???
Jooooooker
Jooooooker
而且 诡异的是 对于同一个C++程序传输过来的二进制数据 有的可以直接反序列化,有的需要去除最后一个字节,有的不管去除不去除都是反序列化错误。。。传输方式试过subprocess, 管道和socket...
下一页
返回顶部
顶部