python - 要列出的整数
问题描述
我正在尝试将一个数字转换为一个整数列表(最好是十六进制,但我知道这是我通过打印格式控制的):
0xFFFF
应该变成:
[0xFF, 0xFF]
我承认我对 Python 处理字节等较低级别信息的能力感到非常困惑。几个小时以来,我一直在阅读有关bytes
、bytearray
和类似方法的信息,但未能以一种看似有效的方式成功完成这项任务。我试图了解如何以最 Pythonic 和最有效的方式做到这一点。
到目前为止,这是我为字符串输入提出的建议:
>>> [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 应该可以是一个数字或一个字符串。可以在单独的操作/功能中执行此操作。
解决方案
如果您想通过将某些特定数量的字符组合在一起来将其分开,那么您可以简单地使用 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函数从字符串的开头开始分组,如果字符串的长度不是我们要分组的数量的倍数,它将把剩余的字符分组(就像从字符串的开头分组一样) 最后。
推荐阅读
- amazon-web-services - ElasticSearch 中的任何方式都会自动增加集群大小?
- wordpress - Woocommerce - 编辑帐户问题
- python - 刷新的 Tkinter 网格可能导致内存泄漏
- python - 如何在 Python 中精确匹配一个单词然后替换?
- javascript - 在 interact.js + SVG 中使用句柄调整大小
- java - 无法在多阶段 docker build 中从一个阶段复制到另一个阶段
- pandas - 对数据框中的日期值进行排序不起作用
- visual-studio-2017 - Visual Studio 2017 - 配置触发自动完成的最小字符数
- node.js - 将 ENUM 与 Sequelize 和 Typescript 一起使用
- mathematical-optimization - 使用线性 OBJ 和非线性约束解决非线性规划问题的免费求解器或技术