在Python 2.x中,struct.pack
返回一个字节字符串。将其转换为整数数组很容易。
>>> bytestr = struct.pack('>Q', 2592701575664680400)
>>> bytestr
'#\xfb X\xaa\x16\xbd\xd0'
>>> [ord(b) for b in bytestr]
[35, 251, 32, 88, 170, 22, 189, 208]
struct
python中的模块用于将python对象转换为字节字符串,通常根据C结构打包规则进行打包。struct.pack
采用格式说明符(一个字符串,该字符串描述应如何布局结构的字节)和一些python数据,并将其打包为字节字符串。struct.unpack
进行相反的处理,采用格式说明符和字节字符串,然后再次以python对象的格式返回未打包数据的元组。
所使用的格式说明符分为两部分。前导字符指定字符串的字节序(字节顺序)。以下字符指定要打包或解压缩的结构的字段的类型。因此,'>Q'
意味着将给定数据打包为big- endian unsigned long long
。要以相反的顺序获取字节,可以改用<
little-endian。
最后的操作是列表理解,它遍历字节字符串的字符并使用ord
内置函数来获取该字符的整数表示。
最后说明:Python实际上没有整数大小的概念。在2.x中,int
它的长度限制为32位,并且long
大小不受限制。在3.x中,这两个被统一为一个类型。因此,即使此操作保证可以提供仅占用一个字节的整数,但如果您在其他操作中使用python,则注意python仍将迫使所得整数保持这种方式。