Python to_bytes返回显示不符,如何获取全\x十六进制格式字节?
为什么
to_bytes的显示结果和预期不一致? 核心原因
你看到的b'\x03f'和你期望的b'\x03\x66'本质是同一个bytes对象,只是Python的显示规则不同:
- 当字节值对应可打印的ASCII字符(比如0x66对应ASCII的'f'),Python会直接显示该字符,而非
\x加两位十六进制数。 - 不可打印的字节(比如0x00、0x0c)才会用
\x转义格式显示。
验证两者等价
可以用代码直接验证:
i = 870 b1 = i.to_bytes(2, byteorder="big") b2 = b'\x03\x66' print(b1 == b2) # 输出 True print(list(b1)) # 输出 [3, 102],102就是十六进制0x66的十进制值
如何得到全\x格式的字符串表示
如果你只是想要把bytes对象转换成全\x转义格式的字符串(而非改变实际字节内容),可以自己写个格式化函数:
def format_bytes_to_hex_str(byte_data): hex_parts = [f'\\x{byte:02x}' for byte in byte_data] return f"b'{''.join(hex_parts)}'" # 示例使用 i = 870 result = i.to_bytes(2, byteorder="big") print(format_bytes_to_hex_str(result)) # 输出 b'\x03\x66'
注意:这个函数返回的是字符串类型,不是bytes对象。实际的bytes对象本身没有“格式”之分,只是Python在控制台显示时会采用更易读的方式(优先显示可打印字符)。
内容的提问来源于stack exchange,提问作者Pierre de Chambure
相关产品推荐
相关产品推荐

