有消息
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
的正确方法是什么?
在Python 2.7中,
bytes([0xDE, 0xAD])
不转换为b'\xde\xad'
,而是转换为'[222, 123]'
,这是一个由10个字符组成的字符串,是数组的字符串表示形式。Python 2.7中的
bytes
是str
的别名,Python 3.x中的bytes
执行“预期”操作,并且bytes([0xde, 0xad])
生成b'\xde\xad
。设置
mybytesfield
的正确方法如下:或者如果首先需要一个整数列表/数组:
相关问题 更多 >
编程相关推荐