今天,简单讲讲android里如何把整数与ip地址进行转换。

这个很简单,在网上查找资料就找到了。这里记录一下。

1、IP地址转换为整数

将IP地址转化成整数的方法如下: 
    1、通过String的indexOf方法找出IP字符串中的点"."的位置。 
    2、根据点的位置,使用String的substring方法把IP字符串分成4段。 
    3、使用Long的parseLong方法把子段转化成一个3位整数。 
    4、通过左移位操作(<<)给每一段的数字加权,第一段的权为2的24次方,第二段的权为2的16次方,第三段的权为2的8次方,最后一段的权为1

 //将127.0.0.1形式的IP地址转换成十进制整数,这里没有进行任何错误处理public static long ipToLong(String strIp) ...{long[] ip = new long[4];//先找到IP地址字符串中.的位置int position1 = strIp.indexOf(".");int position2 = strIp.indexOf(".", position1 + 1);int position3 = strIp.indexOf(".", position2 + 1);//将每个.之间的字符串转换成整型ip[0] = Long.parseLong(strIp.substring(0, position1));ip[1] = Long.parseLong(strIp.substring(position1+1, position2));ip[2] = Long.parseLong(strIp.substring(position2+1, position3));ip[3] = Long.parseLong(strIp.substring(position3+1));return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];}

或者这样也可以

原理:IP地址每段可以看成是8位无符号整数即0-255,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个无符号32为整数。
举例:一个ip地址为10.0.3.193
每段数字相对应的二进制数
1000001010
000000000
300000011
19311000001
组合起来即为:00001010000000000000001111000001,转换为10进制就是:167773121,即该IP地址转换后的数字就是它了。
代码如下


publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(ip2int("10.0.3.193"));
}
publicstaticlongip2int(Stringip){
String[]items=ip.split(".");
returnLong.valueOf(items[0])<<24
|Long.valueOf(items[1])<<16
|Long.valueOf(items[2])<<8
|Long.valueOf(items[3]);
}
}

这里还有一个效率更好的代码:

 public long ipToLong(String ipAddress) {long result = 0;String[] ipAddressInArray = ipAddress.split("\\.");for (int i = 3; i >= 0; i--) {long ip = Long.parseLong(ipAddressInArray[3 - i]);//left shifting 24,16,8,0 and bitwise OR//1. 192 << 24//1. 168 << 16//1. 1   << 8//1. 2   << 0result |= ip << (i * 8);}return result;}

2、整数转换为IP地址
原理:把这个整数转换成一个32位二进制数。从左到右,每8位进行一下分割,得到4段8位的二进制数,把这些二进制数转换成整数然后加上”。”就是这个ip地址了
举例:167773121
二进制表示形式为:00001010000000000000001111000001
分割成四段:00001010,00001010,00000011,11000001,分别转换为整数后加上“。”就得到了10.0.3.193。
代码如下


publicclassIp{
publicstaticvoidmain(String[]args){
System.out.print(int2ip(167773121));
}
publicstaticStringint2ip(longipInt){
StringBuildersb=newStringBuilder();
sb.append(ipInt&0xFF).append(".");
sb.append((ipInt>>8)&0xFF).append(".");
sb.append((ipInt>>16)&0xFF).append(".");
sb.append((ipInt>>24)&0xFF);
return sb.toString();
}
}

这里还有另外的代码也可以将整数转成IP

  //ip = 3232235778public String longToIp(long ip) {StringBuilder result = new StringBuilder(15);for (int i = 0; i < 4; i++) {result.insert(0,Long.toString(ip & 0xff));if (i < 3) {result.insert(0,'.');}ip = ip >> 8;}return result.toString();}//ip = 3232235778public String longToIp2(long ip) {return ((ip >> 24) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + (ip & 0xFF);}

android 整数与ip地址的转换就讲完了。

就这么简单



android 整数与ip地址的转换相关推荐

  1. python整数与IP地址转换

    我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> import socket >>> ...

  2. 华为机试HJ33:整数与IP地址间的转换

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起 ...

  3. 华为机考攻略(python)--字符串操作【9题】(第四题*HJ33整数与IP地址间的转换)

    系列文章目录 文章目录 系列文章目录 前言 一.*HJ33整数与IP地址间的转换 二.sound code 总结 前言 一.*HJ33整数与IP地址间的转换 描述: 原理:ip地址的每段可以看成是一个 ...

  4. C练题笔记之:牛客-HJ033.整数与IP地址间的转换

    题目: 描述 原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成 一个长整数. 举例:一个ip地址为10.0.3.193 每段数字     ...

  5. python整数与IP地址转换 [转]

    原文地址为: python整数与IP地址转换 [转] 我们有时会将一个整数与IP地址进行互换,用python代码实现很简单 将一个整数如2000000,变为一个IP地址的方式 >>> ...

  6. 整数与IP地址间的转换Python

    data = input().split(".") #IP地址转整数 a = [] b = '' caozuo = [a.append(bin(int(i))[2:].rjust( ...

  7. C# IP地址和整数之间的转换,IP地址和数字ip地址的转换

    IP地址与整数之间的转换 1.IP地址转换为整数 原理:IP地址每段可以看成是8位无符号整数即0-255,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个无符号的32位整数. 举例:一 ...

  8. 华为OJ——整数与IP地址间的转换

    题目描述 原理: ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数. 举例: 一个ip地址为10.0.3.193 每段数字 相对应的 ...

  9. android获取网卡ip地址吗,Native.js获取android有线网络IP地址

    刚上手Native.js 请教问题如下: 想通过Native.js 获取Android有线网络IP地址,提示这一行console.log(en.hasMoreElements());报错: Uncau ...

最新文章

  1. pytorch lstm crf 代码理解 重点
  2. 旷视MegEngine数据加载与处理
  3. 人机融合智能与深度态势感知
  4. 算法设计与分析 搜索第k元
  5. login控件authenticate_Login.Authenticate 事件 (System.Web.UI.WebControls) | Microsoft Docs
  6. showModalDialog跨域访问的解决
  7. 【C++教程】01.基本概念
  8. Windows7下Docker的安装
  9. The Power of Android Action Bars(转载)
  10. listwidget设置条目文本居中_将Word文档中的所有图片一键居中对齐,这个方法比插件更好用!...
  11. 人工智能时代,技术人员应该掌握的技能
  12. 福昕pdf虚拟打印机_福昕扫描王将取代扫描仪,OCR文字识别应用办公标配
  13. apache phoenix的JAVA JDBC操作
  14. PCB制作仿真、自制51板测试及性能改进
  15. APP发布的三个证书作用
  16. 小学生5年级计算机书,小学五年级作文:眼镜、电脑、书
  17. Cell:基于33个遗传多样性水稻种质泛基因组分析揭示“隐藏”的基因组变异
  18. 利用傅里叶变换获取低频和高频部分图像
  19. 视频教程-实用通俗易懂的设计模式-软件设计
  20. 博主称抖音屏蔽很多关键词致谐音梗大流行

热门文章

  1. 使用dbms_stats.gather_table_stats调整表的统计信息
  2. Win10开发UWP使用.Net Native编译时遇到的一些问题。
  3. 平衡二叉查找树 AVL 的实现
  4. NSArray ----NSMutableArray
  5. 《Orange’s 一个操作系统的实现》3.保护模式3----DOS加载.EXE过程
  6. springboot actuator监控笔记
  7. linux下安装mysql-5.6.41
  8. SVN专题(Visual SVN Server + TortoiseSVN + Visual SVN)
  9. django 分页功能
  10. 关于解决DevExpress用DevExpress patch工具破解后经常弹出试用框的问题