如何在 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 中将原始十六进制字节写入标准输出?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中将二进制数据写入文件

如何从 BluetoothChat 的输入/输出流中读取/写入原始十六进制字节?

如何在python 3中有效地将原始字节写入numpy数组数据

在 Python 3 中将字节转换为十六进制字符串的正确方法是啥?

在 Python 3 中将二进制字符串转换为字节数组

在Python 3中将十六进制字符串(python 2)转换为带有十六进制数字的字节