ece*_*ulm 5 python protocol-buffers
有留言
message MyMessage {
required bytes mybytesfield = 1;
}
Run Code Online (Sandbox Code Playgroud)
我生成了 python 代码
protoc -I. --python_out=. message.proto
Run Code Online (Sandbox Code Playgroud)
并尝试添加这样的字节字段(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())
Run Code Online (Sandbox Code Playgroud)
但它似乎对文字进行编码,[222, 173]而不是dead根据 的输出进行判断hexdump -C。
正确的写入方法是0xDEAD什么mybytesfield?
bytes([0xDE, 0xAD])b'\xde\xad'在 Python 2.7 中不翻译为'[222, 123]'10 个字符的字符串,它是数组的字符串表示形式。
bytes在Python 2.7中是 的别名str,在Python 3.x中bytes执行“预期”的事情并bytes([0xde, 0xad])产生b'\xde\xad。
正确的设置方法mybytesfield如下:
msg.mybytesfield = b'\xDE\xAD' #literal
Run Code Online (Sandbox Code Playgroud)
或者如果您首先需要一个整数列表/数组:
msg.mybytesfield = ''.join(chr(item) for item in [0xDE, 0xAD])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12089 次 |
| 最近记录: |