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

时间:2011-04-14 10:15:47

标签: python formatting

我需要从随机整数列表(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,1,2,3,127,200,255])

然而,这看起来有点尴尬。有更简单的方法吗?

11 个答案:

答案 0 :(得分:100)

为了完整起见,请使用现代.format()语法:

>>> numbers = [1, 15, 255]
>>> ''.join('{:02X}'.format(a) for a in numbers)
'010FFF'

答案 1 :(得分:49)

''.join('%02x'%i for i in input)

答案 2 :(得分:31)

>>> str(bytearray([0,1,2,3,127,200,255])).encode('hex')
'000102037fc8ff'

答案 3 :(得分:14)

另一个选项是binascii.hexlify

a = [0,1,2,3,127,200,255]
print binascii.hexlify(bytes(bytearray(a)))

打印

000102037fc8ff

这也是我机器上大字符串的最快版本。

在Python 2.7或更高版本中,您可以使用

进一步改善这一点
binascii.hexlify(memoryview(bytearray(a)))

保存bytes来电所创建的副本。

答案 4 :(得分:10)

与我的其他答案类似,只是重复格式字符串:

>>> numbers = [1, 15, 255]
>>> fmt = '{:02X}' * len(numbers)
>>> fmt.format(*numbers)
'010FFF'

答案 5 :(得分:3)

a = [0,1,2,3,127,200,255]
print str.join("", ("%02x" % i for i in a))

打印

000102037fc8ff

(另请注意,对于10到15之间的整数,您的代码将失败。)

答案 6 :(得分:2)

从 Python 3.6 开始,您可以使用 f-strings

>>> number = 1234
>>> f"{number:04x}"
'04d2'

答案 7 :(得分:0)

使用python 2.X,您可以执行以下操作:

numbers = [0, 1, 2, 3, 127, 200, 255]
print "".join(chr(i).encode('hex') for i in numbers)

打印

'000102037fc8ff'

答案 8 :(得分:0)

我认为,最新的首选方法f-string

''.join(f'{i:02x}' for i in [1, 15, 255])

格式化选项

旧的格式样式是%语法:

['%02x'%i for i in [1, 15, 255]]

更现代的方法是.format方法:

 ['{:02x}'.format(i) for i in [1, 15, 255]]

最近,从python 3.6开始,我们被视为f-string syntax

[f'{i:02x}' for i in [1, 15, 255]]

格式语法

请注意,f'{i:02x}'的工作方式如下。

  • :前面的第一部分是要格式化的输入或变量。
  • x指示字符串应为he x 。比较f'{100:02x}'f'{100:02d}'
  • 02指示该字符串应以0的长度左侧填充2。比较f'{100:02x}'f'{100:30x}'

答案 9 :(得分:0)

带有一些美化功能的示例,类似于python 3.8中可用的sep选项

def prettyhex(nums, sep=''):
    return sep.join(f'{a:02x}' for a in nums)

numbers = [0, 1, 2, 3, 127, 200, 255]
print(prettyhex(numbers,'-'))

输出

00-01-02-03-7f-c8-ff

答案 10 :(得分:0)

来自Python documentation。使用内置的format()函数,您可以使用'x'或'X'指定十六进制基数 示例:

x = 255 print('数字为{:x}'。format(x))

输出:

数字是ff

这是基本选项

类型
'b'二进制格式。输出以2为底的数字。 'c'字符。在打印之前将整数转换为相应的unicode字符。 'd'十进制整数。输出以10为底的数字。 'o'八进制格式。输出以8为底的数字。 'x'十六进制格式。使用以小写字母表示9以上的数字,输出以16为底的数字。 “ X”十六进制格式。以大写字母输出大于9的数字,以16为基数输出数字。 'n'号。这与“ d”相同,除了它使用当前的语言环境设置来插入适当的数字分隔符。 无与“ d”相同。