如何让Python 3输出原始十六进制字节?我想输出十六进制0xAA
。
如果我使用print(0xAA)
,我会收到ASCII' 170'。
答案 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!....