Как определить переменную с двумя нулями - PullRequest
0 голосов
/ 07 декабря 2011

Я делаю генератор MAC-адресов и в настоящее время у меня есть эта проблема.

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

Мне нужно начать генерировать пятый байт с начала, поэтому я определил mac1 [5] = 00, но вместо двух 0 я получаю только один 0?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Гораздо проще просто рассматривать весь 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)))

См. Показать номер с ведущими нулями

0 голосов
/ 07 декабря 2011

Вы не можете установить целое число как 00, оно всегда будет уменьшаться до 0, добавлено к этому факту, в Python 2.x, помещая 0 перед целым числом (например, 0123), будет сказаноpython вы хотите, чтобы это число оценивалось как octal!вызывающе не то, что вы хотите.В Python 3.x 0integer вообще не разрешено!

вам нужно использовать строки, если вы хотите 00 вместо 0.

Из интереса, выпытаюсь сгенерировать диапазон мач между mac1 и mac2, если так, то я подозреваю, что у меня есть более элегантное решение, если вам интересно.


РЕДАКТИРОВАТЬ:

Рабочий растворвыведет шестнадцатеричные значения mac-адреса между началом и концом, поскольку он работает внутренне с целыми числами между 0 and 255, значения start и end являются целыми числами, а не шестнадцатеричными значениями.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...