腾讯高频题:IP地址与int整数的转换(位运算)

举报
野猪佩奇996 发表于 2022/01/23 00:19:25 2022/01/23
【摘要】 一、题目 给你一个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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。