2014-02-27 41 views
2

我正在理解計算來自信號源的數據的CRC的一段代碼。以下是我不瞭解的一篇文章。我看到,Python有一個方法來生成CRC功能 我有0python中的struct pack和crc

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)) 

這是幹什麼的?

回答

2

以下代碼創建打包二進制數據字符串。它通過使用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操作,這意味着如果一個位被置位(該位爲1)在這兩個數字(dest_idmask32),所得到的位將1。如果其中一個是0,那麼結果位將是0。上下文中的操作可確保結果值不超過32位/ 4字節。

您應該閱讀約bitwise operations,更具體地說how they work in python