将IP地址字符串转换为int

时间:2017-10-30 00:56:57

标签: python

我对python很新,并在我的作业提示上寻求帮助。

以下是教授的确切提示:

  

这两个   start_ip和end_ip应为12位整数。那就是制作IP   查找更容易。首先在句点分割IP地址,然后为每个数字添加前导零   使它们中的每一个都是三位数,即字符串102.1.2.0变为整数   102001002000.提示:使用字符串zfill()方法(零填充)并执行操作   用于构建数字字符串的字符串,仅在整数后才转换为int   已建成(请注意,当转换为第一个数字的int前导零时   由于int没有前导零而丢失 - 这没关系。

所以基本上我们从ip字符串中删除点,将字符串重新格式化为12个字符长,然后将其转换为int。

例如: 0.0.0.0应该转到 - > 000.000.000.000 102.1.2.0应该转到 - > 102001002000

这就是我想出来的,但它似乎不起作用:

def ip_to_int(ip):
ip = ip.split('.')
ip = ip[0].__str__() + ip[1].__str__() + ip[2].__str__() + ip[3].__str__()
ip = ip.zfill(12)
return int(ip)

例如,当我将ip 0.0.0.0插入此代码时,它返回int 0。 当我输入1.0.0.0时,它会产生1,000。我无法确定为什么会发生这种情况。

就像我说我是python的新手所以我所做的一些可能并不完全合理。

提前致谢。

5 个答案:

答案 0 :(得分:4)

教授对zfill的询问是:

ip =  ip[0].__str__().zfill(3) 
    + ip[1].__str__().zfill(3) 
    + ip[2].__str__().zfill(3) 
    + ip[3].__str__().zfill(3)

但请注意,您的列表已包含字符串,因此您不需要再次转换这些字符串,那么您的代码将是:

ip =   ip[0].zfill(3) 
     + ip[1].zfill(3) 
     + ip[2].zfill(3) 
     + ip[3].zfill(3)

并使其更加优雅和pythonic你可以做:

ip = ''.join([i.zfill(3) for i in ip])

答案 1 :(得分:1)

你可以试试这个:

int(''.join([i.zfill(3) for i in ip.split(".")]))

答案 2 :(得分:1)

def ip_to_int(ip):
    return int("".join([n.zfill(3) for n in ip.split('.')]))

解释:

首先,我们将ip字符串拆分为部分:

     ip.split('.')

然后我们创建一个列表,将每个部分填充到长度为3的字符串:

     [n.zfill(3) for n in ip.split('.')]

接下来我们加入它们("".join())并将结果字符串转换为整数(int())。

答案 3 :(得分:1)

您目前正在解决此问题的方法,您将字符串"102.1.2.0",然后将其拆分为数组["102", "1","2","0"],然后将字符串放在一起"102120",然后填充零。 000000102120。你现在看到了答案吗?

首先尝试自己解决,然后看看这是否是你想出的答案。

  

在将每个字符串放在一起之前,您需要zfill(3)。您可以一直输入str(ip[0]).zfill(3) + str(ip[1]).zfill(3) + ...,但如果您的教授已经超越了那些,那么使用for循环是更好的编码习惯。试试for i in range(4): result = result + str(ip).zfill(3)

答案 4 :(得分:1)

现在已经很晚了,但是:

def ip_to_int(ip):
    m = ''
    for i in ip.split('.'):
        m += (3-len(i))*'0' + i
    return int(m)