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



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

例如,正确的答案将从上面的字符串中提取4字节的数字作为0x288D720。然后除以2^20将得到40.5525。主要是我很难找到在python中进行字节操作的正确方法。在C中,我只需要获取每个字节的指针,并将它们移位到我想要的位置,然后转换为int或long。

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)

对于提取,您只需执行foo[:8]

十六进制到字节:python 中的十六进制字符串到字节数组

重新排列字节:字节反向AB CD到CD AB与python

您可以使用struct转换为长

(2**20) 做一个正态除法

最新更新