当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从两个8位整数计算16位整数值?》经验,为你挑选了2个好方法。

为了说明我的意思:在十六进制编辑器中,我有8C 01一个396小端.我正在使用的数据是一个带有两个独立的8位整数的元组i = (140, 1).

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



1> Willem Van O..:

你需要将它乘以256(2 8).所以函数将是这样的:

def pack (tup) :
    return 256*tup[1]+tup[0]

或执行按位移位,这在使用位时更有意义:

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

<<意味着您将tup[1]八个位置的值放在左侧.pipe(|)表示执行OR运算.如果你强制元组中的值小于256并且至少在理论上可以导致一些加速,这是合理的.

更通用

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

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)|(...)



2> eph..:

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

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

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

>>> from struct import pack, unpack
>>> unpack('

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有