1

私はさまざまなインターネット投稿を見てきましたが、私が見た多くのコードは次のように見えます:

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

誰かがこのコードの仕組みを説明できますか?

4

3 に答える 3

4

なぜ人々はそれをすべて書くことを主張するのですか?

def mactobinar(mac):
  return binascii.unhexlify(mac.replace(':', ''))
于 2010-06-07T02:01:47.100 に答える
1

7.3. struct — 文字列をパックされたバイナリ データとして解釈します。それは始めるのに良い場所です。

于 2010-06-07T02:02:20.993 に答える
0

わかりました、私は本当に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

于 2010-06-07T02:06:50.573 に答える