我正在尋找一種簡單的算法,將兩個2字節整數合併爲一個唯一的4字節整數。Python:從兩個整數創建一個整數?
這兩個2bytes整數都是整數正整數,範圍爲0..65535
。
我想創建一個4字節整數,它是兩者的精確組合,在某種程度上,這將使它容易:
(1)給出的兩個2字節的整數 - >計算該4字節整數的值。
(2)給出4bytes整數 - >解析兩個2bytes整數的內容。
任何想法如何在python
中實現此目的?
我正在尋找一種簡單的算法,將兩個2字節整數合併爲一個唯一的4字節整數。Python:從兩個整數創建一個整數?
這兩個2bytes整數都是整數正整數,範圍爲0..65535
。
我想創建一個4字節整數,它是兩者的精確組合,在某種程度上,這將使它容易:
(1)給出的兩個2字節的整數 - >計算該4字節整數的值。
(2)給出4bytes整數 - >解析兩個2bytes整數的內容。
任何想法如何在python
中實現此目的?
如何:
def combine(n, m):
return (n << 16) | m
def extract(c):
return (c >> 16), c & 0xffff
該解決方案放在一個32位字的上半部分的2個字節的整數中的一個,另一個進入下半部分。爲了提取這些值,只需取上半部分(c >> 16
)和下半部分(c & 0xffff
)。
>>> i1, i2 = 345, 12
>>> i1 * 0x10000 + i2
22609932
>>> divmod(22609932, 0x10000)
(345, 12)
很好的答案,我不確定誰是贏家...... – user3262424
@ user3262424,考慮你在n或m簽名時是否關心安全,或者其中一個的大小是否大於16位。 (如果i1是浮點數,則i1 * 0x10000也會污染較低的16位。) – smci
謝謝你,很好的答案。 – user3262424
德克,你的分數低於伊格納西奧,因此我選擇你的答案作爲獲勝者。雖然都很好。 – user3262424