Python 十六进制字符串到带反斜杠的十六进制字符串
Python Hex-String to Hex-String with Backslash
我真的很困惑,Python 中的字节字符串。
我需要比较两个字节串,所以它们应该被相同地转换(?)
我有一串十六进制值:
52fab71f49a01ef92e793b41c13c5458080679919c7e5888f195935bd50c1bb8
如果我用 bytes.fromHex('52fab...')
将其转换为字节字符串,我得到:
b'R\xfa\xb7\x1fI\xa0\x1e\xf9.y;A\xc1<TX\x08\x06y\x91\x9c~X\x88\xf1\x95\x93[\xd5\x0c\x1b\xb8'
但我希望开头的 'R'
为 '0x52'
。我怎样才能做到这一点?
为什么我得到 'R'
而不是 '0x52'
?例如,对于第二个字节,我得到 '0xfa'
for 'fa'
.
与其他 Ascii“字母”如 'y'、';'、'A' ...
存在相同问题
我希望这不会太混乱 - 经过长时间的研究,我还没有找到合适的解决方案。
问候
丹尼尔
你不能。
如果您使用的是标准 bytes
类型,那么它的字符串表示形式就是这样的:它将所有 ASCII 字符表示为它们本身。例如,b'\x42'
是 ASCII 'R'
字符,因此它会被打印出来。
当然,您可以创建自己的函数来获得您想要的输出,例如:
def print_me(thing: bytes):
print(''.join(
f'\x{byte:02x}'
for byte in thing
))
>>> print_me(bytes.fromhex("52fab71f49a01ef92e793b41c13c5458080679919c7e5888f195935bd50c1bb8"))
\x52\xfa\xb7\x1f\x49\xa0\x1e\xf9\x2e\x79\x3b\x41\xc1\x3c\x54\x58\x08\x06\x79\x91\x9c\x7e\x58\x88\xf1\x95\x93\x5b\xd5\x0c\x1b\xb8
但存储在您的 bytes
对象中的基础数据仍然是相同的,无论您如何表示它。
我真的很困惑,Python 中的字节字符串。
我需要比较两个字节串,所以它们应该被相同地转换(?)
我有一串十六进制值:
52fab71f49a01ef92e793b41c13c5458080679919c7e5888f195935bd50c1bb8
如果我用 bytes.fromHex('52fab...')
将其转换为字节字符串,我得到:
b'R\xfa\xb7\x1fI\xa0\x1e\xf9.y;A\xc1<TX\x08\x06y\x91\x9c~X\x88\xf1\x95\x93[\xd5\x0c\x1b\xb8'
但我希望开头的 'R'
为 '0x52'
。我怎样才能做到这一点?
为什么我得到 'R'
而不是 '0x52'
?例如,对于第二个字节,我得到 '0xfa'
for 'fa'
.
与其他 Ascii“字母”如 'y'、';'、'A' ...
存在相同问题我希望这不会太混乱 - 经过长时间的研究,我还没有找到合适的解决方案。
问候
丹尼尔
你不能。
如果您使用的是标准 bytes
类型,那么它的字符串表示形式就是这样的:它将所有 ASCII 字符表示为它们本身。例如,b'\x42'
是 ASCII 'R'
字符,因此它会被打印出来。
当然,您可以创建自己的函数来获得您想要的输出,例如:
def print_me(thing: bytes):
print(''.join(
f'\x{byte:02x}'
for byte in thing
))
>>> print_me(bytes.fromhex("52fab71f49a01ef92e793b41c13c5458080679919c7e5888f195935bd50c1bb8"))
\x52\xfa\xb7\x1f\x49\xa0\x1e\xf9\x2e\x79\x3b\x41\xc1\x3c\x54\x58\x08\x06\x79\x91\x9c\x7e\x58\x88\xf1\x95\x93\x5b\xd5\x0c\x1b\xb8
但存储在您的 bytes
对象中的基础数据仍然是相同的,无论您如何表示它。