2012-09-19 16 views
2

你會想到那裏是一個價值的差額,B中給出此代碼:按位和反對0xfff - 沒有意義?

[79, 20480, 2222, 0] 

,每個元素都是一個:

s = "\x4f\x00\x00\x50\xae\x08\x00\x00" 
a = map(lambda x:x & 0xffff, struct.unpack('HHHH', s)) 
b = map(lambda x:x, struct.unpack('HHHH', s)) 
在他們最終會被這個名單這兩種情況下

INT。

的原因,我問的是,我看着tcp.py在pyip源,其中包括基本的代碼和「&爲0xFFFF」,似乎毫無意義 - 我這麼想嗎?

回答

4

「& 0xffff」有所不同的唯一時間是當大於16位時。即,執行邏輯 - 併產生一個值,其中比下16更重要的位全部設置爲零。

+0

爲了清楚起見,我更新了答案文本。 – Kirby

+2

好吧,我認爲pyip作者想要做的是確保這些值是兩個字節 - 我假設'H'arg解包結構做到了這一點,但再次查看文檔'標準' 'H'(無符號短)的大小應該是兩個字節,但它實際上取決於平臺,所以他保證了代碼的可移植性。 – lemondifficult