我想生成64位long int作爲文檔的唯一ID。如何「連接」兩個32位int以在Python中獲得64位長度?
一個想法是將32位int的用戶ID與另一個32位int的Unix時間戳組合成一個唯一的64位長整數。
按比例縮小的例子是:
合併兩個4位數字0010
和0101
以形成8位數字00100101
。
- 這個方案有意義嗎?
- 如果是這樣,我該如何做Python中的數字「連接」?
我想生成64位long int作爲文檔的唯一ID。如何「連接」兩個32位int以在Python中獲得64位長度?
一個想法是將32位int的用戶ID與另一個32位int的Unix時間戳組合成一個唯一的64位長整數。
按比例縮小的例子是:
合併兩個4位數字0010
和0101
以形成8位數字00100101
。
左通過比特數在所述第二數量移位的第一個數字,然後添加(或按位或 - 取代+
與在以下實施例|
)第二個數字。
result = (user_id << 32) + timestamp
對於您的按比例縮小的例子,
>>> x = 0b0010
>>> y = 0b0101
>>> (x << 4) + y
37
>>> 0b00100101
37
>>>
這應做到:
(x << 32) + y
foo = <some int>
bar = <some int>
foobar = (foo << 32) + bar
在接下來的傢伙(這是我在這種情況下是我)。下面是一般的做法(對於按比例縮小的示例):
def combineBytes(*args):
"""
given the bytes of a multi byte number combine into one
pass them in least to most significant
"""
ans = 0
for i, val in enumerate(args):
ans += (val << i*4)
return ans
其他大小將4更改爲32或其他值。
>>> bin(combineBytes(0b0101, 0b0010))
'0b100101'
來吧,主人不喜歡等待。接班! – 2010-08-24 03:23:57