2010-08-24 48 views
4

我想生成64位long int作爲文檔的唯一ID。如何「連接」兩個32位int以在Python中獲得64位長度?

一個想法是將32位int的用戶ID與另一個32位int的Unix時間戳組合成一個唯一的64位長整數。

按比例縮小的例子是:

合併兩個4位數字00100101以形成8位數字00100101

  1. 這個方案有意義嗎?
  2. 如果是這樣,我該如何做Python中的數字「連接」?
+0

來吧,主人不喜歡等待。接班! – 2010-08-24 03:23:57

回答

10

左通過比特數在所述第二數量移位的第一個數字,然後添加(或按位或 - 取代+與在以下實施例|)第二個數字。

result = (user_id << 32) + timestamp 

對於您的按比例縮小的例子,

>>> x = 0b0010 
>>> y = 0b0101 
>>> (x << 4) + y 
37 
>>> 0b00100101 
37 
>>> 
+4

難道你不能使用|而不是+在這個例子中? – 2010-08-24 03:26:39

+0

是的,你可以 - 注意到。 – sykora 2010-08-24 03:28:30

+0

如果任何值大於32位,那麼使用位掩碼可能是明智的。 – Moberg 2016-03-15 16:28:20

4

這應做到:

(x << 32) + y 
5
foo = <some int> 
bar = <some int> 

foobar = (foo << 32) + bar 
2

在接下來的傢伙(這是我在這種情況下是我)。下面是一般的做法(對於按比例縮小的示例):

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' 
相關問題