首页 > 解决方案 > 将 32 位整数输入转换为 IP 地址时出错

问题描述

我正在尝试将 32 位整数输入转换为 IP 地址,但我很难正确打印 IP 地址。

例如,我为我的程序提供一个 32 位整数,10000000111111110000001100001111我得到的结果是.......128........33023........8453891........2164196111.

def main():
    integer_input = input('Welcome. Please provide a 32 bit integer.')
    ip = ''
    value = 0

    for i, d in enumerate(integer_input):
        value *= 2
        value += int(d)

        if (i+1) % 8 == 0:
            ip += str(value)
        if (i+1) is not 32:
            ip += '.'

    value = 0
    print(ip)

main()

标签: pythonpython-3.x

解决方案


对所有八位字节重复使用,并且在打印出值后value永远不会重置回。0如果value在计算八位字节后重置回 0,您将得到正确的结果。

基本上添加value = 0到以下块,即:

        if (i+1) % 8 == 0:
            ip += str(value)
            value = 0

执行:

>>> main()
Welcome. Please provide a 32 bit integer.10000000111111110000001100001111
.......128........255........3........15

此外,您永远不想用来is比较数字之间的相等性。即你应该有这个

        if (i+1) != 32:

推荐阅读