为了账号安全,请及时绑定邮箱和手机立即绑定

整数列表.

整数列表.

慕尼黑5688855 2021-04-13 09:15:11
我正在尝试将数字转换为整数列表(最好是十六进制,但是我知道这是通过打印格式控制的):0xFFFF应该变成:[0xFF, 0xFF]我承认,我对Python处理诸如字节之类的较低级别信息的能力感到非常困惑。数小时来bytes,我一直在阅读有关,bytearray和类似方法的信息,但无法以一种似乎有效的方式成功完成此任务。我正在尝试了解如何以最有效的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 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

如果您想通过将一些特定数量的字符组成一组来将其分开,则可以使用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]

*注意: wrap函数使字符串从字符串的开头开始,如果字符串的长度不是我们要分组的数目的倍数,它将使其余字符分组(就像从字符串的开头进行分组一样) ) 最后。


查看完整回答
反对 回复 2021-04-27
?
临摹微笑

TA贡献1982条经验 获得超2个赞

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

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

'{:02x}'表示我们将数字打印为十六进制的一个(x),并在必要时使用两个前导零02)。

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

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

例如:

>>> list(bytes.fromhex('0xFFFF'.replace('0x', '')))
[255, 255]


查看完整回答
反对 回复 2021-04-27
  • 2 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信