IP地址十进制与二进制的转换

文章详细介绍了如何将IPv4和IPv6的十进制表示转换为二进制,以及如何从二进制形式恢复十进制,通过函数`get_bin_v4`和`get_decimal_v4`进行转换操作。

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

一、IPv4

十进制->二进制

def get_bin_v4(prefix):
    ip = prefix.split('/')[0]
    mask = prefix.split('/')[1]
    bin_all = (''.join([bin(int(x) + 256)[3:] for x in ip.split('.')]))
    return bin_all


prefix_v4 = '192.168.1.0/24'
bin_mask_1 = get_bin_v4(prefix_v4)
print(bin_mask_1)

输出如下:

11000000101010000000000100000000

二进制->十进制

def get_decimal_v4(bin_all):
    """
    :param bin_all: str
    :return:
    """
    decimal_all = ''
    bin_all = list(bin_all)
    for i in range(0, len(bin_all)-1, 8):  # 0, 1, 2, 3
        decimal = int(bin_all[i]) * pow(2, 7) + int(bin_all[i+1]) * pow(2, 6) + int(bin_all[i+2]) * pow(2, 5) + int(bin_all[i+3]) * pow(2, 4) + \
                + int(bin_all[i+4]) * pow(2, 3) + int(bin_all[i+5]) * pow(2, 2) + int(bin_all[i+6]) * pow(2, 1) + int(bin_all[i+7]) * pow(2, 0)
        decimal_all += str(decimal)
        if i!= 24:
            decimal_all += '.'
    return decimal_all


    bin_v4 = '11000000101010000000000100000000'
    decimal_all = get_decimal_v4(bin_v4)
    print(decimal_all)

输出如下:

192.168.1.0

二、IPv6

十进制->二进制

def get_bin_v6(prefix):
    bin_all = ''
    ip = prefix.split('/')[0]
    mask = prefix.split('/')[1]
    part_list = ip.split(':')

    miss_part = 8 - len(part_list)

    for part in part_list:
        if part != '':
            bin_all += bin(int(part, 16))[2:].zfill(16)
        else:
            for i in range(miss_part + 1):
                bin_all += bin(int('0', 16))[2:].zfill(16)
    return bin_all


prefix_v6 = '2001:1248:43bc::/48'
bin_mask_2 = get_bin_v6(prefix_v6)
print(bin_mask_2)

输出如下:

00100000000000010001001001001000010000111011110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

二进制->十进制

参考IPv4的转化方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值