腾讯高频题:IP地址与int整数的转换(位运算)
【摘要】
一、题目
给你一个IP4的地址,请转成十进制整数 (2021-03 腾讯-PCG-前端) 手撕算法: ip地址转整数 (2021-03 腾讯-TEG-后端) ip字符串转整型(2021-02 快手-效率...
一、题目
给你一个IP4的地址,请转成十进制整数 (2021-03 腾讯-PCG-前端)
手撕算法: ip地址转整数 (2021-03 腾讯-TEG-后端)
ip字符串转整型(2021-02 快手-效率工程-后端)
例如,ip地址为10.0.3.193,把每段拆分成一个二进制形式组合起来为00001010 00000000 00000011 11000001,然后把这个二进制数转变成十进制整数就是167773121。
另外:如何将十进制整数转为IP4地址。
二、思路
(1)IP地址转为int整数
如IP10.0.3.193,将10左移24位,0左移16位,3左移8位,193左移0位。4个seg或运算(即累加了),即为结果。
(2)int整数转为IP地址
将整数的二进制与255做《与操作》,则得到IPv4地址最后8位二进制对应的十进制;然后为了得到第9~16位二进制对应的整数,我们将所给的整数右移8位后与255做《与操作》,以此类推。
三、代码
(1)IP地址转为int整数
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 6 14:18:10 2021
@author: 86493
"""
str = '10.0.3.193'
str = str.split('.')
part1 = int(str[0]) << 24
part2 = int(str[1]) << 16
part3 = int(str[2]) << 8
part4 = int(str[3])
res = part1 | part2 | part3 | part4
print(res)# 167773121
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
(2)int整数转为IP地址
num = 167773121
res = []
res.append(str(num & 255))
res.append(str((num >> 8) & 255))
res.append(str((num >> 16) & 255))
res.append(str((num >> 24) & 255))
# print(res) # ['193', '3', '0', '10']
res.reverse()
res = '.'.join(res)
print(res) # 10.0.3.193
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/121189570
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)