2016-03-12 47 views
-1

我正在與P2P合作,並希望允許同齡人找到對方。我正在構建我的網絡,每個對等點都有一組理想的對等點在網絡中查找。這些節點的ID是十六進制格式。在網絡中,節點不斷搜索具有最接近其理想位置的ID(基於其自己的對等ID)的對等體。有沒有辦法在Python 3中使用十六進制進行數學運算?

查看最接近誰並在網絡中查找其他對等點的最簡單方法是將ID視爲數字。在執行數學運算之前轉換爲整數會使事情變得嚴重複雜。

+0

十六進制不是Python中的類。它只能用一個字符串表示,而不能用字符串進行數學運算。你需要轉換到其他的東西來做到這一點。 – zondo

+0

你到底在做什麼?如果你用Python在十六進制中引用了一些東西,它將被表示爲一個整數值。見:>>> 0x0F'產生'15'。 – hichris123

+0

@ hichris123我所有的ID都是15個字節的十六進制字符串。當你試圖找出數字系統中的什麼地方,你的ID實際上是在哪裏,連續體是從哪裏開始時,在基於16的系統中工作會變得複雜。有了基於10的系統,可以通過簡單的減法和加法找到它。 – KI4JGT

回答

3
>>> a = 0xA 
>>> b = 0xa 
>>> a + b 
20 
>>> hex(a + b) 
'0x14' 
1

十六進制和十進制或任何其他類型的編碼實際上基本上只是1和0。 0xa0160相同,與0b10100000等同。當你做「十六進制數學」時,「十六進制」完全是外圍的。如果你有一個十六進制字符串,如"0xa0",並希望將其轉換成一個數字,你可以使用,那麼就這樣做:

def from_hex(hexdigits): 
    return int(hexdigits, 16) 

x = "0xa0" 
y = "0x10" 
z = hex(from_hex(x) + from_hex(y)) 
print(z) # => 0xb0 

有它周圍沒有真正的方法,除非你想創建自己的自定義子類從int這是不值得的。

+1

你不需要爲int取掉'0x' '工作:'int(「0x2a」,16)'yield 42 – Copperfield

相關問題