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