如何在Python中获取Google protobuf消息的二进制序列化?

9 投票
5 回答
30478 浏览
提问于 2025-04-15 16:45

我在protobuf的Python文档中看到了一个叫SerializeAsString的函数,但这个函数的意思是,它会给我一个二进制数据的字符串版本。有没有办法用Python来序列化和解析一个protobuf数据的二进制数组呢?

我们有一个C++的应用程序,它把protobuf消息作为二进制数据存储在一个文件里。我们想用Python来读取和写入这个文件。

5 个回答

0

你可以使用Python中的字符串来获取序列化的协议缓冲区数据(无论这些数据是用Python、Java、C++还是其他语言创建的,都没关系)。

这是Python版本的协议缓冲区教程中的一行代码:

address_book.ParseFromString(f.read())
1

.serializeToString()这个方法,虽然名字里有“String”,但它其实返回的是bytes类型,而不是str类型。

这让人感到困惑的原因之一是,这个方法的名字没有改变,而且文档也没有更新;你只需要知道,当他们提到“String”时,其实是指bytes

9

Python 2(注意:已经在2020年停止更新)中的字符串可以存储二进制数据,所以SerializeAsString这个方法会返回二进制数据。

补充说明:根据评论的反馈:“在Python 3中,SerializeToString这个方法会返回一个字节类型的实例。”

撰写回答