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



我有一个十六进制数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

使用正则表达式拆分字符串的一种方法:

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

或者,没有正则表达式:

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...

0x000e96a001064d60表示

EUI-64 标识符猜不出来,EUI-64 需要将 FFFE 作为中间字节。

EUI-64 标识符用于:(来源)

  • 火线
  • 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

最新更新