将十六进制数转换为mac地址

时间:2017-10-11 21:01:04

标签: python hex

我有一个十六进制数0x000e96a001064d60。我需要将其转换为mac地址。我被告知这代表IEEE_Complete地址。

在我看来,这里看起来似乎太多了。如何将其转换为MAC地址

我试过了

value = value[2:] if len(value) % 2 == 0 else "0" + value[2:]
return ":".join(value[i:i+2] for i in range(0, len(value), 2))

我得到的是

"00:0e:96:a0:01:06:4d:60

对我来说,成为MAC address

看起来太长了

2 个答案:

答案 0 :(得分:0)

使用RegEx分割字符串的一种方法:

import re

v = 0x000e96a001064d60
s = '{0:016x}'.format(v)
s = ':'.join(re.findall(r'\w\w', s))
print(s)
# -> 00:0e:96:a0:01:06:4d:60

或者,没有RegEx:

v = 0x000e96a001064d60
s = '{0:016x}'.format(v)
s = ':'.join(s[i:i + 2] for i in range(0, 16, 2))
print(s)
# -> 00:0e:96:a0:01:06:4d:60

经典MAC地址有6个字节。这是EUI-48地址。 但是在这里,你有8个字节。所以它看起来像一个EUI-64地址。但是,字节4和5应该是FF:FE ...

答案 1 :(得分:-1)

0x000e96a001064d60代表 EUI-64 identifier 猜不是,EUI-64需要FFFE作为中间字节。

EUI-64标识符用于:(source

  • 火线
  • IPv6(使用无状态自动配置时,将EUI-64修改为单播网络地址或链路本地地址的最低64位)
  • ZigBee / 802.15.4 / 6LoWPAN无线个域网

要在Python中将该数字转换为MAC格式,请使用:

mac = '0x000e96a001064d60'
mac = mac.split('x')[1].zfill(16)
':'.join(''.join(x) for x in zip(*[iter(mac)]*2)

输出:

00:0e:96:a0:01:06:4d:60