Python 使用十六进制转义打印整个字符串,包括可打印字符

Python 使用十六进制转义打印整个字符串,包括可打印字符,python,python-2.7,Python,Python 2.7,打印在终端中看起来像这样: 我想打印不带ASCII码的精确“\x01\x02\x00” 另外,我不确定像“\x01\x02\x00”这样的字符叫什么,我想它是转义的十六进制字符串 我在网上看到过这样的情况: data = Socket.recv(1024) # '\x01\x02\x00' according to debugger print(data) # prints SQH STX \000 不完全是我想要的。是否要输出原始值?您可以根据hex()返回的内容滚动您自己的自定义格式:

打印在终端中看起来像这样:

我想打印不带ASCII码的精确“\x01\x02\x00”

另外,我不确定像“\x01\x02\x00”这样的字符叫什么,我想它是转义的十六进制字符串

我在网上看到过这样的情况:

data = Socket.recv(1024) # '\x01\x02\x00' according to debugger
print(data) # prints SQH STX \000

不完全是我想要的。是否要输出原始值?

您可以根据hex()返回的内容滚动您自己的自定义格式:

输出:

def formatit(s):
    """Truncates 0x from the beginning, prepends leading \x or \x0 as needed.
    Produces hex numbers with 2,4,6,8 etc. positions as needed."""
    if len(s)%2 == 0:
        return r"\x"+s[2:]    # 0x8312 -> \x8312
    else:
        return r"\x0"+s[2:]   # 0x831  -> \x0831

byte_s = [0x83, 0x02, 0x00, 0x00]

s = ''.join(formatit(hex(k)) for k in byte_s)
print(s)  # \x83\x02\x00\x00

如果你想让它更淫秽,你可以选择这一行:

\x83\x02\x00\x00

一个简短的实现:

data='\x00abc'
打印(''.join(映射('\\x{:02x}).格式,映射(ord,数据)))

输出
\x00\x61\x62\x63
/p>打印
repr(数据)
>>data='\x83\x02\x00\x5e\x00'>>repr(数据)打印:'\x83\x02\x00^\x00'缺少x5e,并且在其位置有“^”吗?@sssss repr通过将十六进制的输出替换为已知字符来“优化”十六进制的输出-f.e.将
0x13
替换为
\n
0x10
\r
等一起使用,以减少打印字符的数量。。。猜猜是什么字符
0x5e
\x83\x02\x00\x00
s = ''.join(r"\x"+ "0"*(len(k)%2) + k[2:] for k in (hex(j) for j in byte_s))