2011-07-03 47 views
3

我正在尋找一種簡單的算法,將兩個2字節整數合併爲一個唯一的4字節整數。Python:從兩個整數創建一個整數?

這兩個2bytes整數都是整數正整數,範圍爲0..65535

我想創建一個4字節整數,它是兩者的精確組合,在某種程度上,這將使它容易:

(1)給出的兩個2字節的整數 - >計算該4字節整數的值。

(2)給出4bytes整數 - >解析兩個2bytes整數的內容。

任何想法如何在python中實現此目的?

回答

16

如何:

def combine(n, m): 
    return (n << 16) | m 

def extract(c): 
    return (c >> 16), c & 0xffff 

該解決方案放在一個32位字的上半部分的2個字節的整數中的一個,另一個進入下半部分。爲了提取這些值,只需取上半部分(c >> 16)和下半部分(c & 0xffff)。

+0

謝謝你,很好的答案。 – user3262424

+0

德克,你的分數低於伊格納西奧,因此我選擇你的答案作爲獲勝者。雖然都很好。 – user3262424

8
>>> i1, i2 = 345, 12 
>>> i1 * 0x10000 + i2 
22609932 
>>> divmod(22609932, 0x10000) 
(345, 12) 
+0

很好的答案,我不確定誰是贏家...... – user3262424

+0

@ user3262424,考慮你在n或m簽名時是否關心安全,或者其中一個的大小是否大於16位。 (如果i1是浮點數,則i1 * 0x10000也會污染較低的16位。) – smci