用于解析包含数组格式的 protobuf 数据的二进制文件的 Python API

Posted

技术标签:

【中文标题】用于解析包含数组格式的 protobuf 数据的二进制文件的 Python API【英文标题】:Python API to parse binary file which contains protobuf data in array format 【发布时间】:2018-05-08 03:58:04 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

C++ 接口:

bool SerializeToArray(void * data, int size) const

只是将二进制数据存储到一个字节数组中,而不是一个字符串对象。如果再写入文件,可以正常反序列化,如tutorial所示:

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

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

【讨论】:

以上是关于用于解析包含数组格式的 protobuf 数据的二进制文件的 Python API的主要内容,如果未能解决你的问题,请参考以下文章

google protobuf 数据类型_理解Protobuf数据格式解析

protobuf简介

protobufs 格式的原始解码器

Google Protobuf简明教程

Google Protobuf简明教程

protobuf使用简介