要列出的整数

时间:2018-07-08 17:20:13

标签: python python-2.7

我正在尝试将数字转换为整数列表(最好是十六进制,但是我知道这是通过打印格式控制的):

0xFFFF

应变成:

[0xFF, 0xFF]

我承认我对Python处理字节等较低级别信息的能力感到非常困惑。我已经花了几个小时阅读有关bytesbytearray和类似方法的内容,但未能以一种看起来有效的方式成功完成此任务。我正在尝试了解如何以最有效的Python方式做到这一点。

到目前为止,这是我针对字符串输入提出的:

>>> [ord(x) for x in '0xFFFF'.replace('0x','').decode('hex')]
[255, 255]

和int输入:

>>> v = 0xFFFF
>>> [ord(x) for x in '{:04x}'.format(v).decode('hex')]
[255, 255]

我知道列表可以这样设置:

>>> a = list(ord(x) for x in '0xFFFF'.replace('0x','').decode('hex'))
>>>'[{}]'.format(', '.join([hex(x).upper() for x in a]))
'[0XFF, 0XFF]'

是否有更干净的方法来进行转换然后输出格式?我在Stack Overflow或Google上找不到的任何问题或答案都不能满足这种特殊情况,但也许我只是错过了一些东西。任何帮助将不胜感激。

编辑:很抱歉-我的原始问题并不能完全代表我要完成的任务。为了尽量减少重复性,我跳过了一些重要的事情:0xFFFF应该可以是数字或字符串。可以在单独的操作/功能中做到这一点。

2 个答案:

答案 0 :(得分:2)

可以使用Python中的默认字符串格式处理格式:

'[{}]'.format(', '.join(map('0x{:02X}'.format, a)))

'{:02x}'表示我们将数字打印为十六进制 1(x,带有两个前导零({{1} })。

关于从字符串到整数列表的转换,以下内容可能更简洁:

02

例如:

list(bytes.fromhex('0xFFFF'.replace('0x', '')))

答案 1 :(得分:2)

如果要通过将一些特定数量的字符分成一组来进行分隔,则可以简单地使用textwrap的wrap函数来实现。在我们的例子中,组中的字符数为2。

>>>from textwrap import wrap
>>>v = 0xFFFF
>>>print list('0x' + x.upper() for x in wrap(str(hex(v))[2:], 2))
>>>v = 0xFFFFF
>>>print list('0x' + x.upper() for x in wrap(str(hex(v))[2:], 2))
>>>print list(int('0x' + x, 16) for x in wrap(str(hex(v))[2:], 2))

输出:

>>>['0xFF', '0xFF']
>>>['0xFF', '0xFF', '0xF']
>>>[255, 255, 15]

*注意:包装函数使字符串从字符串的开头开始,如果字符串的长度不是我们必须分组的数目的倍数,它将使最后剩下的一组字符(从字符串的开头开始分组)。