我有一个长的十六进制字符串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)
做一个正态除法