从两个8位整数计算16位整数值?

时间:2015-12-07 01:17:52

标签: python integer hex

说明我的意思:在十六进制编辑器中,我8C 01396 little-endian。我正在使用的数据是一个带有两个独立的8位整数i = (140, 1)的元组。

要计算16位值,我的第一种方法是简单地将第二个整数乘以255,然后添加第一个。然而,这种方法完全错误,因为它没有给出正确的值(由于我缺乏知识)。任何人都可以提供更好的(可能是Pythonic)方法吗?

2 个答案:

答案 0 :(得分:8)

您需要将其乘以 256 (2 8 )。所以函数将是这样的:

def pack(tup) :
    return (tup[1]<<8)|tup[0]

或执行bitwise shift,这在使用位时更有意义:

<<

此处tup[1]表示您将|八个位置的值放在左侧。管道(256)表示您执行OR操作。如果你强制元组中的值小于def pack(tup) : sum = 0 for i in range(len(tup)) : sum |= tup[i]<<(i<<3) return sum 并且至少在理论上可以导致一些加速,这是合理的。

更通用

如果您的元组具有任意长度(例如三个,四个或更多元素),您可以定义更通用的函数:

<<3

此处8用作与def pack(tup) : sum = 0 for i in range(len(tup)) : sum |= tup[i]<<(8*i) return sum 相乘的快捷方式,因此等效函数将为:

tup[0]|(tup[1]<<8)|(tup[2]<<16)|(...)

或者写出来,就像:

{{1}}

答案 1 :(得分:6)

你应该乘以256 ......

>>> i[1]*256 + i[0]
396

有一种使用struct模块的Python方式,但在这种简单的情况下不是必需的。

>>> from struct import pack, unpack
>>> unpack('<H', pack('BB', *i))[0]
396