我制作了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我需要从开头开始生成第五个字节,所以我定义了mac15 = 00,但我只得到了一个0,而不是两个0?
发布于 2011-12-07 19:18:24
将整个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)))发布于 2011-12-07 18:49:36
你不能将一个整数设置为00,它总是会降级为0,除此之外,在Python2.x中,在整数前面放一个0 (例如0123)会告诉python你想把这个数字计算成一个octal!显然不是你想要的。在Python3.x中,0integer是完全不允许的!
如果您希望使用00而不是0,则需要使用字符串。
出于兴趣,您是否正在尝试在mac1和mac2之间生成一系列macs,如果是这样的话,如果您感兴趣,我想我有一个更优雅的解决方案。
编辑:
工作解决方案将打印开始和结束之间的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)https://stackoverflow.com/questions/8414031
复制相似问题