我有一串二进制文件,我试图转换为整数。这些块最初是8个十六进制字符,并转换为二进制字符。你如何把它变成64位的int值?
s = 'Q\xcb\x80\x80\x00\x00\x01\x9bQ\xcc\xd2\x00\x00\x00\x01\x9b'
date_chunk = s[0:8]
value_chunk = s[8:]
现在看起来像是我打印出来的十六进制。我如何制作两个整数?第一个是自纪元以来编码为秒的日期。
答案 0 :(得分:4)
>>> str = '0123456789abcdef'
>>> str[-8:]
'89abcdef'
>>> str = 'abcd'
>>> str[-8:]
'abcd'
模块解包二进制文件。使用struct
代码签名。
qq
您还提到了原始的8个十六进制字符。在这种情况下使用>>> s = 'Q\xcb\x80\x80\x00\x00\x01\x9bQ\xcc\xd2\x00\x00\x00\x01\x9b'
>>> len(s)
16
>>> import struct
>>> struct.unpack('>QQ',s) # big-endian
(5893945824588595611L, 5894316909762970011L)
>>> struct.unpack('<QQ',s) # little-endian
(11169208553011465041L, 11169208550869355601L)
功能。例如:
binascii.unhexlify
答案 1 :(得分:0)
import struct
struct.unpack(">QQ",s)
或
struct.unpack("<QQ",s)
取决于生成字节的机器的字节顺序