Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从两个8位整数计算16位整数值?_Python_Integer_Hex - Fatal编程技术网

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