3

我在解析包含数组格式的 protobuf 数据的二进制文件时遇到问题。

当我使用 python API 时,ParseFromString 输出始终为零或无。

二进制文件中的序列化protobuf数据是使用 C++ API 生成的,SerializeToArray. 但是要解析bin文件,我想用python来解析。但是在 python 中,我找不到任何 API 来将序列化protobuf数据解析为二进制文件中的数组。

是否有任何 python API 可以解决此问题?任何人都可以为此提出解决方案吗?

4

1 回答 1

1

C++接口:

bool SerializeToArray(void * data, int size) const

只是将二进制数据存储到一个字节数组中,而不是一个字符串对象。如果然后将其写入文件,则可以以正常方式对其进行反序列化,如教程所示:

address_book = addressbook_pb2.AddressBook()
f = open(sys.argv[1], "rb")
address_book.ParseFromString(f.read())

在 C++ 端使用的事实SerializeToArray()不会改变文件的格式。当然,C++ 代码可以例如将自定义标头写入需要删除的文件,但这将是代码的不同部分。

于 2018-05-08T10:55:19.557 回答