如何在Python 3中将原始十六进制字节写入stdout?

时间:2015-08-10 10:49:57

标签: python python-3.x hex

如何让Python 3输出原始十六进制字节?我想输出十六进制0xAA

如果我使用print(0xAA),我会收到ASCII' 170'。

3 个答案:

答案 0 :(得分:11)

print()获取 unicode文本并将其编码为适合您终端的编码。

如果要编写原始字节,则必须写入sys.stdout.buffer以绕过io.TextIOBase class并避免编码步骤,并使用bytes()对象从中生成字节整数:

import sys

sys.stdout.buffer.write(bytes([0xAA]))

这不包括换行符(通常在使用print()时添加)。

答案 1 :(得分:5)

解决方案是首先创建一个bytes对象:

x = bytes.fromhex('AA')

然后使用缓冲编写器

将其输出到stdout
sys.stdout.buffer.write(x)

答案 2 :(得分:2)

您还可以在字节字符串中使用十六进制字节转义序列(" \ 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!....