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

发布于 2024-09-04 16:47:31 字数 290 浏览 11 评论 0原文

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

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

有人可以解释一下这段代码是如何工作的吗?

I've been looking over various internet postings and a lot of the code I've seen looks similar to this:

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

Can someone explain how this code works?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仅此而已 2024-09-11 16:47:31

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

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

Why do people insist on writing all that?

def mactobinar(mac):
  return binascii.unhexlify(mac.replace(':', ''))
煮茶煮酒煮时光 2024-09-11 16:47:31

好吧,我并不是 pythen 方面最好的,但我会尝试一下。

当 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)))

文档版本
struct.pack(fmt, v1, v2, ...)

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

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

这里有一些可以帮助您入门的项目:

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

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

Ok im not really the best at pythen but ill give it a shot.

when the mac address is passed into mactobinar the first thing that happens is that your removing the semi colon to make a constant string without any delimiters.

So 01:23:45:67:89:ab becomes 0123456789ab

Ok in the next part were looping threw a range, this range here is creating a offset range.

So range(0, len(temp), 2) returns an array with the ranges like range(start,max,steps);

then for every value in that array were creating a binary for that integer using struct.pack and also joining it together

Your version
struct.pack('B', int(temp[i: i + 2], 16)))

Documanted version
struct.pack(fmt, v1, v2, ...)

pack converts an entity into its binary format.

hope this gives you some insight on whats going here

Here are some items to get you started:

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文