python - 在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,高性能解决方案。
解决方案
你可以试试这个:
def convert_to_hex(num) -> str:
return "\\" + str(hex(num))[1:]
print(convert_to_hex(1))
样本输出:
1 -> \x1
2 -> \x2
254->\xfe
255->\xff
推荐阅读
- c# - Socket.BeginReceiveFrom 和 Socket.BeginReceiveMessageFrom 有什么区别?
- azure - SQL Data Sync Agent 2.0 安装错误系统服务
- scala - Scala IDE 中的 Spark SaveAsTextFile() 创建“temporay->0”文件夹结构,而不是函数中提到的那个
- python - 为什么函数顺序的顺序很重要?
- gitlab - 如何从 GitLab 13 ci 构建过程中排除主分支?
- gmail - 如何将这个被阻止的附件从 gmail 导入到另一个 gmail?
- html - 当我在 xslt 中迭代时,如何同时从两个不同的节点/元素中获取文本?
- c# - 访问传递的参数 MVC Xhttp.Send()
- java - 使用命令进行初始构造的 Java ProcessBuilder 语法
- gitlab - 工件在脚本中不可用