有没有办法打印python3字节作为十六进制字符串没有ascii转换和没有使用循环?

pkln4tw6  于 2022-12-30  发布在  Python
关注(0)|答案(2)|浏览(107)
buf = b"\x00\xdd\x41"

print(str(buf))

给出“\x00\xddA”。
我需要“”
基本上Show hex value for all bytes, even when ASCII characters are present没有循环或外部模块。只是想知道这是否可能与任何内置的Python3函数。
我目前的代码是"".join(["\\x" + hex(x)[2:] for x in buf]),我正在尝试找到一个内置的替代品,如果它存在于Python 3或任何更简单的替代品中的话。

y0u0uwnf

y0u0uwnf1#

您可以使用以下格式:

buf = b"\x00\xdd\x41"
hex_string = "\\x".join("{:02x}".format(b) for b in buf)
print(hex_string)  # output: '\x00\xdd\x41'
wfveoks0

wfveoks02#

没有内置的函数可以做你想做的事情。
你认为“不是循环”是什么?下面的re.sub的非Python实现中有一个隐藏的循环,但是没有 Python 循环。

import re

def hexify(s):
    return "b'" + re.sub(r'.', lambda m: f'\\x{ord(m.group(0)):02x}', buf.decode('latin1')) + "'"

buf = b'\x00\xdd\x41'
print(hexify(buf))

输出:

b'\x00\xdd\x41'

相关问题