python中的struct pack和crc

时间:2014-02-27 10:46:46

标签: python struct crc

我正在理解一段代码,用于计算来自信号源的数据的CRC。以下是我不理解的部分。我看到python有一种生成CRC功能的方法 我的初始种子为0

application_crc_func = crcmod.mkCrcFun(0x1F4ACFB13, initCrc=seed, rev=False)

所以这应该导致一个函数,它将我必须计算CRC的数据作为参数? 以下是我无法理解的代码部分。

 # Use inverse of destination ID as the first value for 'data'
 data = struct.pack('>I', ((~dest_id) & mask32))

这是做什么的?

1 个答案:

答案 0 :(得分:2)

以下代码创建压缩二进制数据字符串。它是通过使用struct-module完成的。

# Use inverse of destination ID as the first value for 'data'
data = struct.pack('>I', ((~dest_id) & mask32))

我会将其分解并尝试解释每项操作的作用。

struct.pack('>I', ...)

输入被视为Big-endian,32位(4字节)无符号整数。

(~dest_id) & mask32

这里有两个按位运算符,~&

~翻转dest_id的位。它通常在以two's complement形式解释值时使用。这是“反向”操作,在评论中提到。

&执行bitwise AND操作,这意味着如果在两个数字(1dest_id中设置了一个位(该位为mask32) ),结果位为1。如果其中任何一个为0,则结果位为0。上下文中的操作可确保结果值不超过32位/ 4字节。

您应该阅读bitwise operations,更具体地说,how they work in python