Python 从两个8位整数计算16位整数值?
为了说明我的意思:在一个十六进制编辑器中,我有Python 从两个8位整数计算16位整数值?,python,integer,hex,Python,Integer,Hex,为了说明我的意思:在一个十六进制编辑器中,我有8c01,它是396little-endian。我正在处理的数据是一个具有两个独立的8位整数的元组I=(140,1) 要计算16位的值,我的第一种方法是将第二个整数乘以255,然后将第一个整数相加。然而,这种方法是完全错误的,因为它没有给出正确的值(由于我缺乏知识)。有谁能提供更好的(可能是Pythonic)方法吗?您需要将其乘以256(28)。所以函数应该是这样的: def pack (tup) : return 256*tup[1]+tu
8c01
,它是396
little-endian。我正在处理的数据是一个具有两个独立的8位整数的元组I=(140,1)
要计算16位的值,我的第一种方法是将第二个整数乘以255,然后将第一个整数相加。然而,这种方法是完全错误的,因为它没有给出正确的值(由于我缺乏知识)。有谁能提供更好的(可能是Pythonic)方法吗?您需要将其乘以256(28)。所以函数应该是这样的:
def pack (tup) :
return 256*tup[1]+tup[0]
tup[0]|(tup[1]<<8)|(tup[2]<<16)|(...)
或者执行一个,这在处理位时更有意义:
def pack(tup) :
return (tup[1]<<8)|tup[0]
这里
你应该乘以256
>>> i[1]*256 + i[0]
396
有一种使用struct
module的Python方法,但在这种简单的情况下并不需要
>>> from struct import pack, unpack
>>> unpack('<H', pack('BB', *i))[0]
396
>从结构导入包中解包
>>>解包(“我喜欢后一种方法,但只是为了巩固我的理解,你介意用8位的4元组写一个32位数字的例子吗?它归结为乘以256
的幂。因此,对于三项,你可以计算为65536*tup[2]+256*tup[1]+tup[0]
,或者(tup[2]@威勒姆·瓦农森,我想你的意思大概是tup[0]|(tup[1]@OutstandingBill:嗨,不,是tup[0]|(tup[1]
>>> i[1]*256 + i[0]
396
>>> from struct import pack, unpack
>>> unpack('<H', pack('BB', *i))[0]
396