如何在python十六进制字符串中重新排序字节并转换为long

时间:2016-03-28 17:51:23

标签: python python-2.7 byte

我有这个长十六进制字符串20D788028A4B59FB3C07050E2F30在python 2.7中我想提取前4个字节,更改它们的顺序,将其转换为有符号数,将其除以2 ^ 20然后将其打印出来。在C中,这对我来说很容易:)但在这里我有点卡住了。

例如,正确答案将从上面的字符串中提取4字节数作为0x288D720。然后除以2 ^ 20将是40.5525。主要是我在查找在python中进行字节操作的正确方法时遇到了麻烦。在C中,我只是抓住指向每个字节的指针,并将它们移动到我希望它们转移到int或long的位置。

2 个答案:

答案 0 :(得分:2)

Python在字符串方面很棒,所以让我们使用我们拥有的东西:

Res

除以2 ** 20对位有点奇怪,所以也许转移至少值得一提......

s = "20D788028A4B59FB3C07050E2F30"
t = "".join([s[i-2:i] for i in range(8,0,-2)])
print int(t, 16) * 1.0 / pow(2,20)

毕竟,我会

print int(t, 16) >> 20

答案 1 :(得分:1)

对于提取,您可以这样做 foo[:8]

十六进制到字节:hexadecimal string to byte array in python

重新排列字节:byte reverse AB CD to CD AB with python

您可以使用struct转换为长

(2**20)

进行正常划分