如何使用python protobuf 2.5.0设置字节字段?

2024-09-27 07:27:44 发布

您现在位置:Python中文网/ 问答频道 /正文

有消息

message MyMessage {
  required bytes mybytesfield = 1;
}

我用

protoc -I. --python_out=. message.proto

并尝试像这样添加bytes字段(Python 2.7.6):

import message_pb2 as mpb

msg = mpb.MyMessage()
msg.mybytesfield = bytes([0xDE, 0xAD])
# msg.mybytesfield = b'\xDE\xAD'
with open("output.bin", "w") as f:
    f.write(msg.SerializeToString())

但从hexdump -C的输出来看,它似乎是对文本[222, 173]进行编码,而不是dead

0xDEAD写入mybytesfield的正确方法是什么?


Tags: import消息messagebytesasrequiredmsgout
1条回答
网友
1楼 · 发布于 2024-09-27 07:27:44

在Python 2.7中,bytes([0xDE, 0xAD])不转换为b'\xde\xad',而是转换为'[222, 123]',这是一个由10个字符组成的字符串,是数组的字符串表示形式。

Python 2.7中的bytesstr的别名,Python 3.x中的bytes执行“预期”操作,并且bytes([0xde, 0xad])生成b'\xde\xad

设置mybytesfield的正确方法如下:

msg.mybytesfield = b'\xDE\xAD' #literal

或者如果首先需要一个整数列表/数组:

msg.mybytesfield = ''.join(chr(item) for item in [0xDE, 0xAD]) 

相关问题 更多 >

    热门问题