首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何定义带两个零的变量

如何定义带两个零的变量
EN

Stack Overflow用户
提问于 2011-12-07 18:43:54
回答 2查看 314关注 0票数 0

我制作了MAC地址生成器,目前我有这个问题。

代码语言:javascript
运行
复制
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?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-07 19:18:24

将整个mac视为一个数字要简单得多:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2011-12-07 18:49:36

你不能将一个整数设置为00,它总是会降级为0,除此之外,在Python2.x中,在整数前面放一个0 (例如0123)会告诉python你想把这个数字计算成一个octal!显然不是你想要的。在Python3.x中,0integer是完全不允许的!

如果您希望使用00而不是0,则需要使用字符串。

出于兴趣,您是否正在尝试在mac1mac2之间生成一系列macs,如果是这样的话,如果您感兴趣,我想我有一个更优雅的解决方案。

编辑:

工作解决方案将打印开始和结束之间的mac地址的十六进制值,因为它在内部与0 and 255之间的整数工作startend的值是整数而不是十六进制值。

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8414031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档