2011-12-07 15 views
0

私はMACアドレス生成器を作っていますが、現在私はこの問題があります。 2つのゼロで変数を定義する方法

mac1="001122334455" 
mac2="001122334695" 

mac1 = [mac1[x:x+2] for x in xrange(0,len(mac1),2)] 
mac2 = [mac2[x:x+2] for x in xrange(0,len(mac2),2)] 
k=0 
for item in mac1: 
    mac1[k] = "%d" % int(mac1[k], 16) 
    mac2[k] = "%d" % int(mac2[k], 16) 
    mac1[k]=int(mac1[k]) 
    mac2[k]=int(mac2[k]) 
    k=k+1 

while mac1 != mac2: 
    #print mac1 

    print "%X0:%X:%X:%X:%X:%X" % (mac1[0], mac1[1], mac1[2], mac1[3], mac1[4], mac1[5]) 
    mac1[5] = int(mac1[5]) + 1 
    if int(mac1[5]) > 255: 
     #mac1[5] = 00 
     mac1[4] = int(mac1[4]) +1 
     if int(mac1[4]) > 255: 
      mac1[3] = int(mac1[3]) + 1 
      if int(mac1[3]) > 255: 
       mac1[2] = int(mac1[2]) +1 
       if int(mac1[2]) > 255: 
        mac1[1] = int(mac1[1]) +1 

私はので、私は[5] =が、代わりに2 0の00、私は唯一の0を得るMAC1を定義し始めてから5番目のバイトの生成を開始する必要がありますか?あなたはそれが常に 0に低下します 00として整数を設定することはできません

+0

は "'%のX0を交換してください:%X:%X:%X:%X:% %02X:%02X:%02X:%02X:%02X "" - 私の少し短い解決策を見てください。 – eumiro

+0

解決策はありました。ありがとうございました:) – Thomas

+0

シフトとモッズの束をするよりも、文字列スライスを取るほうが簡単です。 – Dave

答えて

0

ただ1つの番号として全体のMacを治療するはるかに簡単:

mac1 = 0x1122334455 
mac2 = 0x1122334695 
for i in xrange(mac1, mac2+1): 
    s = "%012x" % i 
    print ':'.join(s[j:j+2] for j in range(0,12,2))) 

Display number with leading zeros

0

は、(例えば、0123のために)整数の前に0を入れPythonの2.xの中で、その事実に追加あなたはその数があると評価したいのpythonを教えてくれますoctal!挑戦的にあなたが望むものではありません。 Python 3.xでは、0integerはまったく許可されていません!

0の代わりに00が必要な場合は、文字列を使用する必要があります。

興味のある方は、mac1mac2の間に範囲のMacを生成しようとしていますか?興味があればより洗練されたソリューションがあると思われます。


EDIT:それは0 and 255の間の整数で、内部で動作しますので、

作業溶液をstartend値は整数ではない進値であり、開始と終了の間でMACアドレスの進値を出力します。

start = [0,11,22,33,44,55] 
end = [0,11,22,33,46,95] 

def generate_range(start, end): 
    cur = start 

    while cur < end:  
     cur[5] = int(cur[5]) + 1 

     for pos in range(len(cur)-1, -1, -1): 
      if cur[pos] == 255: 
       cur[pos] = 0 
       cur[pos-1] = int(cur[pos-1]) + 1 

     yield ':'.join("{0:02X}".format(cur[i]) for i in range(0,len(cur))) 

for x in generate_range(start, end): 
    print (x) 
+0

はい私はそれをしようとしています。どのようによりエレガントにそれを行うための任意の情報は良いだろう。 – Thomas

+0

私はあなたが '255'と比較しているのに気付いていますが、あなたは2つのポジションを持っています、私は16進数も使っていると思いますか? – Serdalis

+0

はい私は16進数を使用しています。 – Thomas

関連する問題