将列表中的几个索引转换为十六进制

时间:2019-04-19 10:20:44

标签: python python-3.x python-2.7

我有一个整数列表arr,其中包含从arr [0]到arr [4]的五个元素/索引

最后三个元素是客户编号,范围从01到250,000。我需要的是将它们转换为十六进制,以便数组看起来像这样:

对于客户1, arr = [00,00,01,00,00]-客户编号是最后三个字节

对于客户2, arr = [00,00,02,00,00]-客户编号是最后三个字节

对于250,000个客户, arr = [00,00,90,d0,03]-客户编号是最后三个字节, 250,000,十六进制= 3D090

我知道我可以使用hex()函数将索引分别转换为十六进制,或者可以将整个数组转换为十六进制,但是如何将值转换为十六进制并将其放置在上述格式的最后三个字节中?

2 个答案:

答案 0 :(得分:1)

这将起作用:

i = 250000

constant = ['00', '00']

result = [constant + [first + second 
                      for first, second in zip(string[::2], string[1::2])][::-1] 
          for string in (f'{i:X}'.zfill(6) for i in range(1, 250001))]
print(result[0])
print(result[-1])

对于Python <= 3.5:

i = 250000

constant = ['00', '00']

result = [constant + [first + second 
                      for first, second in zip(string[::2], string[1::2])][::-1] 
          for string in ('{:X}'.format(i).zfill(6) for i in range(1, 250001))]
print(result[0])
print(result[-1])

输出:

['00', '00', '01', '00', '00']
['00', '00', '90', 'D0', '03']

说明:

首先,我们认识到可以使用字符串格式将每个数字转换为字符串,然后根据需要使用0将其填充为长度6。

接下来,我们将字符串分成两个字符的块并将其反转以使其具有所需的表示形式。

最后,我们向每个内部'00'中添加两个list字符串。

答案 1 :(得分:0)

可能会帮助


import re
def split_hex_rev(number):
    arr = re.findall('..',hex(number).replace('x',''))
    while len(arr)<5:
        arr.append('00')
    arr.reverse()
    return arr