2012-09-13 69 views
2

我想要一個正常格式的MAC地址,我從get_node()獲得。Python獲得MAC地址的正常HEX格式

我得到的格式是0x0L0xdL0x60L0x76L0x31L0xd6L,我想刪除0x和L-term到一個真正的十六進制數。它應該是00-0D-60-76-31-D6。

我該如何認識到這一點?

def getNetworkData (self): 
    myHostname, myIP, myMAC = AU.getHostname() 

    touple1 = (myMAC & 0xFF0000000000) >> 40 
    touple2 = (myMAC & 0x00FF00000000) >> 32 
    touple3 = (myMAC & 0x0000FF000000) >> 24 
    touple4 = (myMAC & 0x000000FF0000) >> 16 
    touple5 = (myMAC & 0x00000000FF00) >> 8 
    touple6 = (myMAC & 0x0000000000FF) >> 0 

    readableMACadress = hex(touple1) + hex(touple2) + hex(touple3) + hex(touple4) + hex(touple5) + hex(touple6) 

    print readableMACadress 

    return myHostname, myIP, readableMACadress 

回答

6

使用

readableMACaddress = '%02X-%02X-%02X-%02X-%02X-%02X' % (touple1, touple2, touple3, touple4, touple5, touple6) 

更簡潔,您可以通過使用

readableMACaddress = '-'.join('%02X' % ((myMAC >> 8*i) & 0xff) for i in reversed(xrange(6))) 
+0

完美消除臨時touple變量!它是如何工作的? – Furtano

+0

'%X'將數字格式化爲大寫的十六進制數,不帶'0x'或'L'。 '02'的意思是「填充零到2個位置」。所以每個'%02X'格式化一個兩位數的大寫十六進制數字。 – nneonneo

+0

簡明替換使用'''join'將六個十六進制字節連接在一起,這些字節使用'(myMAC >> 8 * i)&0xff'進行計算。我們使用'reversed(xrange(6))''將'i'從5重複到0。 – nneonneo