如果protobuf中bytes类型的字段呢,python如何写入和读取

动态 未结 0 248
小小草
小小草 LV1 2023年9月23日 23:40 发表
在protobuf中,bytes类型的字段可以使用Python中的bytes对象来表示。您可以使用以下方法将bytes对象写入protobuf消息中: ```python import message_pb2 # 创建Message对象并设置bytes字段 message = message_pb2.Message() message.data = b"hello world" ``` 在上面的示例中,我们创建了一个`Message`对象,并将`data`字段设置为一个包含字符串`hello world`的bytes对象。 要从protobuf消息中读取bytes类型的字段,您可以使用以下方法: ```python import message_pb2 # 反序列化Message对象并获取bytes字段 with open("message.bin", "rb") as f: data = f.read() message = message_pb2.Message() message.ParseFromString(data) print(message.data) # 输出b"hello world" ``` 在上面的示例中,我们从名为`message.bin`的文件中读取序列化的`Message`对象,并将其反序列化为Python对象。然后,我们使用`message.data`属性访问`data`字段的值,并将其打印到控制台上。 请注意,在Python中,bytes对象是不可变的。如果您需要修改bytes对象的内容,请先将其转换为bytearray对象,然后再进行修改。例如: ```python import message_pb2 # 创建Message对象并设置bytes字段 message = message_pb2.Message() message.data = bytearray(b"hello world") # 将bytes字段转换为bytearray对象并修改内容 data = bytearray(message.data) data[0] = ord('H') message.data = bytes(data) ``` 在上面的示例中,我们首先将`data`字段设置为一个bytearray对象,然后将其转换回bytes对象,并将其赋值给`message.data`属性。在修改bytearray对象的内容时,我们需要使用Python内置函数`ord()`将字符转换为ASCII码。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复