首页 > 解决方案 > 在python中将int转换为十六进制字符串

问题描述

我正在尝试将 int 转换为字符串中的十六进制。当前的解决方案无法按预期工作。

十六进制必须是\x格式。例如255 -> \xff;65 -> \x41

接受来自类似问题的解决方案

chr(1) # '\x01'; This is okay.
chr(65) # 'A'
chr(255) # 'ÿ'

即使输出等于相应的十六进制值,输出也不像十六进制。输出必须是\x格式化的十六进制。

使用hex()

hex(1) # '0x1'
hex(65) # '0x41'
hex(255) # '0xff'

这里没有运气。x紧随其后,0所以它没有用。hex(1)没有0之前的1。我想拥有那个。更好的是,我选择的填充长度。 repr(chr(65))正如评论中所建议的那样也不起作用。

hex()带替换

chr(255).replace('0', "\\") # '\\xff'
hex(255).replace('0x', "\\x") # '\\xff'

不能使用replace()任何一种原因\都必须转义,或者代码甚至不起作用。由于涉及复制,我真的很想避免需要修改字符串的解决方案。

int.to_bytes

int.to_bytes(1, 1, 'big') # b'\x01'
int.to_bytes(65, 1, 'big') # b'A'; Why is this suddenly 'A'? Why not b'\x41'
int.to_bytes(255, 1, 'big') # b'\xff'

非常感谢该问题的pythonic,高性能解决方案。

标签: pythontype-conversionhex

解决方案


你可以试试这个:

def convert_to_hex(num) -> str:
    return "\\" + str(hex(num))[1:]


print(convert_to_hex(1))

样本输出:

1 -> \x1
2 -> \x2
254->\xfe
255->\xff

推荐阅读