如何在 Python 3 中将原始十六进制字节写入标准输出?
Posted
技术标签:
【中文标题】如何在 Python 3 中将原始十六进制字节写入标准输出?【英文标题】:How to write a raw hex byte to stdout in Python 3? 【发布时间】:2015-11-02 06:02:22 【问题描述】:如何让 Python 3 输出原始十六进制字节?我想输出十六进制0xAA
。
如果我使用print(0xAA)
,我会得到 ASCII '170'。
【问题讨论】:
【参考方案1】:print()
采用 unicode 文本 并将其编码为适合您终端的编码。
如果要写入原始字节,则必须写入 sys.stdout.buffer
以绕过 io.TextIOBase
class 并避免编码步骤,并使用 bytes()
对象从整数生成字节:
import sys
sys.stdout.buffer.write(bytes([0xAA]))
这不会包含换行符(通常在使用 print()
时添加)。
【讨论】:
【参考方案2】:解决办法是先创建一个bytes
对象:
x = bytes.fromhex('AA')
然后使用缓冲写入器将其输出到stdout
sys.stdout.buffer.write(x)
【讨论】:
【参考方案3】:您还可以在字节串中使用十六进制字节转义序列(“\x”),指定sys.stdout.buffer.write()
方法:
$ python -c 'import sys; sys.stdout.buffer.write(b"\x74\x68\x65\x73\x65\x20\x61\x72\x65\x20\x72\x61\x77\x20\x62\x79\x74\x65\x73\x21\xde\xad\xbe\xef")'
将在您的终端上输出:
these are raw bytes!ޭ��%
并使用xxd
进行检查:
$ python -c 'import sys; sys.stdout.buffer.write(b"\x74\x68\x65\x73\x65\x20\x61\x72\x65\x20\x72\x61\x77\x20\x62\x79\x74\x65\x73\x21\xde\xad\xbe\xef")' | xxd
00000000: 7468 6573 6520 6172 6520 7261 7720 6279 these are raw by
00000010: 7465 7321 dead beef tes!....
【讨论】:
以上是关于如何在 Python 3 中将原始十六进制字节写入标准输出?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 BluetoothChat 的输入/输出流中读取/写入原始十六进制字节?
如何在python 3中有效地将原始字节写入numpy数组数据