我有一个我想要解释为二进制数据的有符号整数数组,因此我做了一些谷歌搜索,发现这个短循环迭代数组并产生所需的输出:
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]
做了什么?
另外,如何以十六进制字节输出结果?
由于
答案 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范围内。