0

文字列の形式のMACアドレスがありますが、

00:23:34:d2:a4:00  

この MAC アドレスはどのように配列にインデックスを付けることができますか?

全体像を把握するために、MAC アドレスの最後の 3 バイト、つまり d2:a4:00 を取得し、それらをバイト配列に格納します。d2,a4,00 の対応するバイトが 00010001、00110010、00000000 の場合、これらのバイナリ値を連結すると 000100010011001000000000 が得られ、これを整数に変換すると 1000200 と言えます。したがって、それに関連する情報にアクセスできます。配列[1000200]を使用したMACアドレス。

逆方向に実行したい場合は、1000200 番号が与えられたとしましょう。それを MAC アドレス 00:23:34:d2:a4:00 に変換するにはどうすればよいですか (最初の 3 バイトがすべてのエントリで同じであると仮定します)。申し訳ありませんが、これは非常に長い投稿です。方向性を教えていただけると大変助かります。そして、効率性は非常に重要です (ネットワーク アプリケーションに必要な実行時間は非常に短いはずです)。前もって感謝します。

4

2 に答える 2

1

MAC の最後の 3 バイトを整数に変換して戻すには、次のようにします。

mac = 'zz:zz:zz:d2:a4:00'
i = int(''.join(mac.split(':')[-3:]), 16) # integer
# -> 13804544

h = '%06x' % i
# -> 'd2a400'

mac = 'zz:zz:zz:%s:%s:%s' % (h[0:2], h[2:4], h[4:6])
# -> 'zz:zz:zz:d2:a4:00'

@Lattywareが言及したように、最初にMACをキーとして辞書を試す必要があります。

整数を 16 進文字列として表される MAC に変換するには、次のようにします。

>>> h = '%012x' % 123
'00000000007b'
>>> ':'.join(h[i:i+2] for i in range(0, 12, 2))
'00:00:00:00:00:7b'
于 2012-09-23T16:38:04.837 に答える
0

split関数を使用するだけで、 ?

(このようなもの:)

[int(_, 16) for _ in "00:23:34:d2:a4:00".split(':')]
于 2012-09-23T16:06:26.820 に答える