需要帮助将MAC地址转换为以太网帧中的二进制数据

1 投票
3 回答
4289 浏览
提问于 2025-04-15 23:38

我在网上看了很多帖子,发现很多代码看起来都差不多,像这样:

def mactobinar(mac):
    addr = ''
    temp = mac.replace(':', '')

    for i in range(0, len(temp), 2):
        addr = ''.join([addr, struct.pack('B', int(temp[i: i + 2], 16)))])

    return addr

有人能解释一下这段代码是怎么工作的吗?

3 个回答

0

好吧,我对Python不是特别在行,但我试试。

当把MAC地址传入mactobinar时,首先做的就是去掉冒号,这样就变成了一个没有任何分隔符的连续字符串。

所以,01:23:45:67:89:ab就变成了0123456789ab。

接下来,我们在循环一个范围,这个范围是用来创建一个偏移量的。

所以range(0, len(temp), 2)会返回一个数组,这个数组的范围就像是从开始到最大值,每次步进2。

然后,对于这个数组里的每一个值,我们使用struct.pack来创建这个整数的二进制表示,并把它们连接在一起。

你的版本是:struct.pack('B', int(temp[i: i + 2], 16)))

文档中的版本是:struct.pack(fmt, v1, v2, ...)

pack的作用是把一个实体转换成它的二进制格式。

希望这能让你对这里发生的事情有一些了解。

这里有一些链接可以帮助你入门:

http://docs.python.org/library/struct.html#format-characters

http://docs.python.org/library/struct.html#struct.pack

1

7.3. struct — 将字符串解释为打包的二进制数据。这是一个很好的入门地方。

4

为什么大家非得写那么多东西呢?

def mactobinar(mac):
  return binascii.unhexlify(mac.replace(':', ''))

撰写回答