需要一些帮助将MAC地址转换为二进制数据以便在以太网帧中使用

时间:2010-06-07 01:56:06

标签: python networking ethernet

我一直在查看各种互联网帖子,我看到的很多代码看起来与此类似:

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 :(得分:4)

为什么人们坚持写所有这些?

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

答案 1 :(得分:1)

答案 2 :(得分:0)

好吧,我真的不是最好的屁股但生病了。

当mac地址传递给mactobinar时,首先发生的事情是你删除半冒号以形成一个没有任何分隔符的常量字符串。

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

好的,在接下来的部分中循环抛出一个范围,这个范围在这里创建一个偏移范围。

所以range(0, len(temp), 2)返回一个数组,其范围如range(start,max,steps);

然后,该数组中的每个值都使用struct.pack为该整数创建二进制文件并将它们连接在一起

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

Documanted版本 struct.pack(fmt, v1, v2, ...)

pack将实体转换为二进制格式。

希望这可以让你了解最新情况

以下是一些可以帮助您入门的内容:

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

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