将n个元素的列表(大小= 2字节,十进制)拆分为2n个元素(大小= 1字节,十六进制)



我有一个十进制的n个元素的列表,每个元素有两个字节长。

比方说:

x = [9000 , 5000 , 2000 , 400]

这个想法是将每个元素拆分为 MSB 和 LSB,并将其存储在连续的列表元素中。

输出应为:

y = [23 , 28 , 13 , 88 , 07 , D0 , 01 , 90]

现在信号号操作的基本逻辑是清楚的:

x=9000
y_msb = x//256 #Hex Quotient for FF
y_lsb = x%256 #Hex Remainder for FF

并将这两个值都存储在十六进制中

输出:

y_msb=23
y_lsb=28

我的问题是在大小为 n 的 Python3 列表中执行此操作的最有效方法是什么。

使用生成器表达式和一些位操作,您可以执行以下操作:

法典:

data = sum(((d >> 8, d & 0xff) for d in in_data), ())

测试代码:

in_data = [9000 , 5000 , 2000 , 400]
out_data = (0x23, 0x28, 0x13, 0x88, 0x07, 0xD0, 0x01, 0x90)
data = sum(((d >> 8, d & 0xff) for d in in_data), ())
assert data == out_data

最新更新