微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将int格式化为十六进制字符串

如何解决将int格式化为十六进制字符串

| 我需要从随机整数(0-255)列表中创建一个十六进制数字字符串。每个十六进制数字应由两个字符表示:5-\“ 05 \”,16-\“ 10 \”,等等。 例:
Input: [0,1,2,3,127,200,255],Output: 000102037fc8ff
我设法提出了:
#!/usr/bin/env python

def format_me(nums):
    result = \"\"
    for i in nums:
        if i <= 9:
            result += \"0%x\" % i
        else:
            result += \"%x\" % i
    return result

print format_me([0,255])
但是,这看起来有点尴尬。有没有更简单的方法?     

解决方法

\'\'.join(\'%02x\'%i for i in input)
    ,为了完整起见,请使用现代的
.format()
语法:
>>> numbers = [1,15,255]
>>> \'\'.join(\'{:02X}\'.format(a) for a in numbers)
\'010FFF\'
    ,
>>> str(bytearray([0,1,2,3,127,200,255])).encode(\'hex\')
\'000102037fc8ff\'
    ,另一个选择是
binascii.hexlify
a = [0,255]
print binascii.hexlify(bytes(bytearray(a)))
版画
000102037fc8ff
这也是在我的机器上处理大型字符串最快的版本。 在Python 2.7或更高版本中,您可以通过使用进行更多改进
binascii.hexlify(memoryview(bytearray(a)))
保存由“ 10”调用创建的副本。     ,与我的其他答案类似,除了重复格式字符串:
>>> numbers = [1,255]
>>> fmt = \'{:02X}\' * len(numbers)
>>> fmt.format(*numbers)
\'010FFF\'
    ,我认为最近的首选方法是
f-string
\'\'.join(f\'{i:02x}\' for i in [1,255])
格式选项 旧的格式样式是
%
语法:
[\'%02x\'%i for i in [1,255]]
更为现代的方法是
.format
方法:
 [\'{:02x}\'.format(i) for i in [1,255]]
最近,从python 3.6开始,我们使用了
f-string
语法:
[f\'{i:02x}\' for i in [1,255]]
格式语法 注意ѭ20的工作原理如下。
:
之前的第一部分是要格式化的输入或变量。
x
表示字符串应为十六进制。比较
f\'{100:02x}\'
f\'{100:02d}\'
02
表示字符串应以
0
填充到长度为
2
。比较
f\'{100:02x}\'
f\'{100:30x}\'
。     ,
a = [0,255]
print str.join(\"\",(\"%02x\" % i for i in a))
版画
000102037fc8ff
(还要注意,您的代码将无法输入10到15之间的整数。)     ,使用python 2.X,您可以执行以下操作:
numbers = [0,255]
print \"\".join(chr(i).encode(\'hex\') for i in numbers)
打印
\'000102037fc8ff\'
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。