我正在理解一段代码,用于计算来自信号源的数据的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))
这是做什么的?
答案 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操作,这意味着如果在两个数字(1
和dest_id
中设置了一个位(该位为mask32
) ),结果位为1
。如果其中任何一个为0
,则结果位为0
。上下文中的操作可确保结果值不超过32位/ 4字节。
您应该阅读bitwise operations,更具体地说,how they work in python。