【问题标题】:struct pack and crc in pythonpython中的struct pack和crc
【发布时间】:2014-02-27 10:46:46
【问题描述】:

我正在理解一段代码,它计算来自信号源的数据的 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))

这是做什么的?

【问题讨论】:

    标签: python struct crc


    【解决方案1】:

    以下代码创建一个打包的二进制数据字符串。它是通过使用struct-module 来完成的。

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

    我会分解并尝试解释每个操作的作用。

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

    输入被视为大端、32 位(4 字节)无符号整数。

    (~dest_id) & mask32
    

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

    ~ 翻转dest_id 的位。它通常在解释 two's complement 形式的值时使用。这会执行评论中提到的“逆”操作。

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

    您应该阅读有关bitwise operations 的信息,更具体地说是how they work in python

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      相关资源
      最近更新 更多