[祖传代码] IPV4地址点分十进制与整数形式相互转化 (Python 3)

本文提供两个实用函数,用于实现IPv4地址的点分十进制表示与整数表示之间的相互转换,并附带异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

受到 scapy.utils.ltoa() 这个函数的启发,想贴一段祖传代码。

IPV4的地址,可以用点分十进制表示,例如:192.168.10.121。与之对应,可以用一个整形数字表示:3232238201。将整数转化成十六进制形式的简单过程是:

hex(3232238201) >>>变>>> 0xc0a80a79 >>>变>>> c0_a8_0a_79 >>>变>>> 192_168_10_121

为实现这两种形式的转换,给出两个祖传函数:

## 输入:整型IPV4地址。例如:3232238201
## 输出:点分十进制字符串IPV4地址。例如:192.168.10.121
## 异常:输入的整数不是一个IPV4地址。
def bytes_2_Dotted_Decimal_Notation(bytes_network):
    #IPV4 address, like 192.168.0.1, 8 bytes
    if (bytes_network <= 0 or bytes_network >= 0xFFFFFFFF):
        raise ValueError("illegal network value", hex(bytes_network))
    ls = [ ]
    for i in range(4):
        ls.append (str( bytes_network & 0xFF))
        bytes_network = bytes_network >> 8
    ls.reverse()
    return ".".join(ls)

## 输入:点分十进制字符串IPV4地址。例如:192.168.10.121
## 输出:整型IPV4地址。例如:3232238201
## 异常:输入的字符串不是一个IPV4地址。      
def dotted_Decimal_Notation_2_Bytes(ddn_network):
    #根据IPV4地址的点分十进制形式,得到整数形式
    ls =ddn_network.split('.')
    result = 0
	    for i in ls:
        if int(i) <0 or int(i)>255:
            raise ValueError("illegal network value", ddn_network)
        result = result <<8 | int(i)
    return result
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值