需要帮助将MAC地址转换为以太网帧中的二进制数据
我在网上看了很多帖子,发现很多代码看起来都差不多,像这样:
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
1
7.3. struct — 将字符串解释为打包的二进制数据。这是一个很好的入门地方。
4
为什么大家非得写那么多东西呢?
def mactobinar(mac):
return binascii.unhexlify(mac.replace(':', ''))