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

how to re-order bytes in a python hex string and convert to long

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

例如,正确答案将从上面的字符串中提取 4 字节数字作为 0x288D720。然后除以 2^20 就是 40.5525。主要是我无法找出在 python 中进行字节操作的正确方法。在 C 语言中,我只是获取指向每个字节的指针并将它们移动到我希望它们去的地方,然后转换为 int 或 long。

对于提取你可以做 foo[:8]

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

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

您可以使用 struct 转换为 long

然后按 (2**20)

进行正常除法

Python 非常适合字符串,所以让我们使用现有的:

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

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

print int(t, 16) >> 20

毕竟我会

print int(t, 16) * 1.0 / (1 << 20)