【问题标题】:Python get normal HEX format for MAC-AdressPython为MAC地址获取正常的十六进制格式
【发布时间】:2012-09-13 10:53:18
【问题描述】:

我想要从 get_node() 获得的 MAC 地址的正常格式。

我得到的格式是 0x0L0xdL0x60L0x76L0x31L0xd6L,我希望删除 0x 并将 L 项转换为真正的十六进制数。应该是 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

【问题讨论】:

    标签: python macos format hex mac-address


    【解决方案1】:

    使用

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

    更简洁地说,您可以通过使用消除临时的touple 变量

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

    【讨论】:

    • %X 将数字格式化为大写十六进制,没有0xL02 表示“将前导零填充到 2 个位置”。所以每个%02X 都会用两位大写十六进制格式化一个数字。
    • 简洁替换使用'-'.join连接六个十六进制字节,使用(myMAC >> 8*i) & 0xff计算。我们使用 reversed(xrange(6))i 从 5 迭代到 0。
    • 我可能会使用xrange(5,-1,-1)。不过,+1 是一个很好的解决方案。
    • 我发现使用reversed 是一种更易读的方式来表达反向迭代。优先事项:)
    猜你喜欢
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多