python struct - 帮助理解一些语法

时间:2017-07-18 18:49:29

标签: python struct

我有一个我想要解释为二进制数据的有符号整数数组,因此我做了一些谷歌搜索,发现这个短循环迭代数组并产生所需的输出:

import struct

data = [-24, -4, -19, 100,...,98, 0]
unpacked = ""

for d in data:
    unpacked += struct.pack("i", d)[0]

print unpacked

从阅读man page of struct我明白这是以“i”格式解释数据,这相当于整数。这段代码中[0]做了什么?

另外,如何以十六进制字节输出结果?

由于

2 个答案:

答案 0 :(得分:2)

我认为这是一个错误。 struct.pack()返回压缩字节。由于格式要求32位整数,因此返回4个字节。那个[0]占用了那些的第一个字节。但如果打包数量超出8位范围,则会被截断。您应该使用b的{​​{1}}格式。这样,如果数字超出范围,你将得到一个正确的例外。

signed char

所以我编码的方式是:

>>> struct.pack("b", 1000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
struct.error: byte format requires -128 <= number <= 127

答案 1 :(得分:0)

struct包为整数生成二进制字符串。 i表示字节整数。因此它将返回一个包含四个字节的字节串。

[0]表示您想要获取第一个字节。如果 little endianness 的计算机这意味着将获得最低有效字节。我想算法的设计者就是在此之后。因此,这意味着如果数据在0-255范围内,则获得包含该数据的一个字节的字节串。

如果机器是 big endianness 。一个将获得最重要的位。对于您的示例,这将为负值的255,对于正值为0,因为示例中的所有值似乎都在-255 - 255范围内。