收到消息
message MyMessage {
required bytes mybytesfield = 1;
}
我使用
生成了python代码protoc -I. --python_out=. message.proto
并尝试添加像这样的字节字段(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())
但它似乎根据[222, 173]
的输出来编码文字dead
而不是hexdump -C
。
将0xDEAD
写入mybytesfield
的正确方法是什么?
答案 0 :(得分:3)
bytes([0xDE, 0xAD])
不会在Python 2.7中转换为b'\xde\xad'
,而是转换为'[222, 123]'
,它是一个由10个字符组成的字符串,它是数组的字符串表示形式。
bytes
是str
的别名,在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])