2012-09-23 69 views
0

我有一個字符串形式的MAC地址陣列,索引使用MAC地址

00:23:34:d2:a4:00 

這怎麼能MAC地址索引到一個數組?

爲了給出一個完整的圖像,我把mac地址中的最後3個字節,即d2:a4:00,存儲在字節數組中。如果d2,a4,00的相應字節是00010001,00110010,00000000,那麼通過連接這些二進制值給我000100010011001000000000,如果轉換成一個整數給我,可以說1000200.所以,我可以訪問與此相關的信息mac地址使用數組[1000200]。

如果我想要在相反的方向做,可以說我給了1000200號碼,我怎麼能將它轉換成MAC地址00:23:34:d2:a4:00(假設前3個字節對所有項)。對不起,這是一個很長的帖子。如果你提供一個方向,這將是很大的幫助。效率非常重要(應用網絡應用所需的執行時間非常少)。提前致謝。

+9

爲什麼沒有字典? ''some_dict [「00:23:34:d2:a4:00」]'' –

+0

對於1000000個條目,字典會太慢。字典只適用於較少數量的項目 –

+3

@JustinCarrey:怎麼這樣?字典有O(1)查找時間。查找時間不應該隨着字典的大小而顯着增加。你有沒有基準使用一個字典與數組? –

回答

1

到了最後3個字節轉換成MAC整數和背部:

mac = 'zz:zz:zz:d2:a4:00' 
i = int(''.join(mac.split(':')[-3:]), 16) # integer 
# -> 13804544 

h = '%06x' % i 
# -> 'd2a400' 

mac = 'zz:zz:zz:%s:%s:%s' % (h[0:2], h[2:4], h[4:6]) 
# -> 'zz:zz:zz:d2:a4:00' 

你應該嘗試字典中的MAC作爲鍵首先作爲@ Lattyware提到。

要轉換到MAC的整數表示爲十六進制串:

>>> h = '%012x' % 123 
'00000000007b' 
>>> ':'.join(h[i:i+2] for i in range(0, 12, 2)) 
'00:00:00:00:00:7b' 
+0

問題是,我必須生成mac地址。也就是說,我將起始數字0轉換爲24位,即000000000000000000000000,然後將其轉換爲mac地址00:00:00:00:00:00。我應該從0開始說,1000000.我不能直接散列一個mac地址而不這樣做。因此,我決定和陣列一起去。 –

+0

@JustinCarrey:我添加了一個例子,展示瞭如何將一個整數轉換爲不帶數組的MAC。 – jfs

0

只需使用split函數,然後通過探索轉換爲二進制?

(像這樣的東西:)

[int(_, 16) for _ in "00:23:34:d2:a4:00".split(':')]