Hel*_*Che 7 python hex integer
为了说明我的意思:在十六进制编辑器中,我有8C 01一个396小端.我正在使用的数据是一个带有两个独立的8位整数的元组i = (140, 1).
为了计算16位值,我的第一种方法是简单地将第二个整数乘以255然后加上第一个.然而,这种方法完全错误,因为它没有给出正确的值(由于我缺乏知识).任何人都可以提供更好的(可能是Pythonic)方法吗?
你需要将它乘以256(2 8).所以函数将是这样的:
def pack (tup) :
return 256*tup[1]+tup[0]
Run Code Online (Sandbox Code Playgroud)
或执行按位移位,这在使用位时更有意义:
def pack(tup) :
return (tup[1]<<8)|tup[0]
Run Code Online (Sandbox Code Playgroud)
这<<意味着您将tup[1]八个位置的值放在左侧.pipe(|)表示执行OR运算.如果你强制元组中的值小于256并且至少在理论上可以导致一些加速,这是合理的.
如果您的元组具有任意长度(例如三个,四个或更多元素),您可以定义更通用的函数:
def pack(tup) :
sum = 0
for i in range(len(tup)) :
sum |= tup[i]<<(i<<3)
return sum
Run Code Online (Sandbox Code Playgroud)
这里<<3用作乘法的快捷方式8,因此等效函数将是:
def pack(tup) :
sum = 0
for i in range(len(tup)) :
sum |= tup[i]<<(8*i)
return sum
Run Code Online (Sandbox Code Playgroud)
或写出来,它是这样的:
tup[0]|(tup[1]<<8)|(tup[2]<<16)|(...)
Run Code Online (Sandbox Code Playgroud)
你应该乘以256 ......
>>> i[1]*256 + i[0]
396
Run Code Online (Sandbox Code Playgroud)
有一种使用struct模块的Python方式,但在这种简单的情况下不是必需的.
>>> from struct import pack, unpack
>>> unpack('<H', pack('BB', *i))[0]
396
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2594 次 |
| 最近记录: |