我有这个长十六进制字符串20D788028A4B59FB3C07050E2F30在python 2.7中我想提取前4个字节,更改它们的顺序,将其转换为有符号数,将其除以2 ^ 20然后将其打印出来。在C中,这对我来说很容易:)但在这里我有点卡住了。
例如,正确答案将从上面的字符串中提取4字节数作为0x288D720。然后除以2 ^ 20将是40.5525。主要是我在查找在python中进行字节操作的正确方法时遇到了麻烦。在C中,我只是抓住指向每个字节的指针,并将它们移动到我希望它们转移到int或long的位置。
答案 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)