怎么讲一个IP在线ip地址转换成整数数 在从整数转换会去

posts - 241,&
comments - 116,&
trackbacks - 0
262728293023910141516172324283031123456
阅读排行榜
评论排行榜
一、基本知识点
——&
把IP地址转化为字节数组通过左移位(&&)、与(&)、或(|)这些操作转为int
整数 ——& IP:
将整数值进行右移位操作(&&&),右移24位,再进行与操作符(&)0xFF,得到的数字即为第一段IP。将整数值进行右移位操作(&&&),右移16位,再进行与操作符(&)0xFF,得到的数字即为第二段IP。将整数值进行右移位操作(&&&),右移8位,再进行与操作符(&)0xFF,得到的数字即为第三段IP。将整数值进行与操作符(&)0xFF,得到的数字即为第四段IP。
二、java代码示例
&&& IPv4Util.javapackage michael.import java.net.InetA/**&* @author michael &br&&*&&&&&&&& blog:
&br&&*&&&&&&&& mail: sjsky007&#&*/public class IPv4Util {&&& private final static int INADDRSZ = 4;&&& /**&&&& * 把IP地址转化为字节数组&&&& * @param ipAddr&&&& * @return byte[]&&&& */&&& public static byte[] ipToBytesByInet(String ipAddr) {&&&&&&& try {&&&&&&&&&&& return InetAddress.getByName(ipAddr).getAddress();&&&&&&& } catch (Exception e) {&&&&&&&&&&& throw new IllegalArgumentException(ipAddr + " is invalid IP");&&&&&&& }&&& }&&& /**&&&& * 把IP地址转化为int&&&& * @param ipAddr&&&& * @return int&&&& */&&& public static byte[] ipToBytesByReg(String ipAddr) {&&&&&&& byte[] ret = new byte[4];&&&&&&& try {&&&&&&&&&&& String[] ipArr = ipAddr.split("\\.");&&&&&&&&&&& ret[0] = (byte) (Integer.parseInt(ipArr[0]) & 0xFF);&&&&&&&&&&& ret[1] = (byte) (Integer.parseInt(ipArr[1]) & 0xFF);&&&&&&&&&&& ret[2] = (byte) (Integer.parseInt(ipArr[2]) & 0xFF);&&&&&&&&&&& ret[3] = (byte) (Integer.parseInt(ipArr[3]) & 0xFF);&&&&&&&&&&&&&&&&&& } catch (Exception e) {&&&&&&&&&&& throw new IllegalArgumentException(ipAddr + " is invalid IP");&&&&&&& }&&& }&&& /**&&&& * 字节数组转化为IP&&&& * @param bytes&&&& * @return int&&&& */&&& public static String bytesToIp(byte[] bytes) {&&&&&&& return new StringBuffer().append(bytes[0] & 0xFF).append('.').append(&&&&&&&&&&&&&&& bytes[1] & 0xFF).append('.').append(bytes[2] & 0xFF)&&&&&&&&&&&&&&& .append('.').append(bytes[3] & 0xFF).toString();&&& }&&& /**&&&& * 根据位运算把 byte[] -& int&&&& * @param bytes&&&& * @return int&&&& */&&& public static int bytesToInt(byte[] bytes) {&&&&&&& int addr = bytes[3] & 0xFF;&&&&&&& addr |= ((bytes[2] && 8) & 0xFF00);&&&&&&& addr |= ((bytes[1] && 16) & 0xFF0000);&&&&&&& addr |= ((bytes[0] && 24) & 0xFF000000);&&&&&&&&&& }&&& /**&&&& * 把IP地址转化为int&&&& * @param ipAddr&&&& * @return int&&&& */&&& public static int ipToInt(String ipAddr) {&&&&&&& try {&&&&&&&&&&& return bytesToInt(ipToBytesByInet(ipAddr));&&&&&&& } catch (Exception e) {&&&&&&&&&&& throw new IllegalArgumentException(ipAddr + " is invalid IP");&&&&&&& }&&& }&&& /**&&&& * ipInt -& byte[]&&&& * @param ipInt&&&& * @return byte[]&&&& */&&& public static byte[] intToBytes(int ipInt) {&&&&&&& byte[] ipAddr = new byte[INADDRSZ];&&&&&&& ipAddr[0] = (byte) ((ipInt &&& 24) & 0xFF);&&&&&&& ipAddr[1] = (byte) ((ipInt &&& 16) & 0xFF);&&&&&&& ipAddr[2] = (byte) ((ipInt &&& 8) & 0xFF);&&&&&&& ipAddr[3] = (byte) (ipInt & 0xFF);&&&&&&& return ipA&&& }&&& /**&&&& * 把int-&ip地址&&&& * @param ipInt&&&& * @return String&&&& */&&& public static String intToIp(int ipInt) {&&&&&&& return new StringBuilder().append(((ipInt && 24) & 0xff)).append('.')&&&&&&&&&&&&&&& .append((ipInt && 16) & 0xff).append('.').append(&&&&&&&&&&&&&&&&&&&&&&& (ipInt && 8) & 0xff).append('.').append((ipInt & 0xff))&&&&&&&&&&&&&&& .toString();&&& }&&& /**&&&& * 把192.168.1.1/24 转化为int数组范围&&&& * @param ipAndMask&&&& * @return int[]&&&& */&&& public static int[] getIPIntScope(String ipAndMask) {&&&&&&& String[] ipArr = ipAndMask.split("/");&&&&&&& if (ipArr.length != 2) {&&&&&&&&&&& throw new IllegalArgumentException("invalid ipAndMask with: "&&&&&&&&&&&&&&&&&&& + ipAndMask);&&&&&&& }&&&&&&& int netMask = Integer.valueOf(ipArr[1].trim());&&&&&&& if (netMask & 0 || netMask & 31) {&&&&&&&&&&& throw new IllegalArgumentException("invalid ipAndMask with: "&&&&&&&&&&&&&&&&&&& + ipAndMask);&&&&&&& }&&&&&&& int ipInt = IPv4Util.ipToInt(ipArr[0]);&&&&&&& int netIP = ipInt & (0xFFFFFFFF && (32 - netMask));&&&&&&& int hostScope = (0xFFFFFFFF &&& netMask);&&&&&&& return new int[] { netIP, netIP + hostScope };&&& }&&& /**&&&& * 把192.168.1.1/24 转化为IP数组范围&&&& * @param ipAndMask&&&& * @return String[]&&&& */&&& public static String[] getIPAddrScope(String ipAndMask) {&&&&&&& int[] ipIntArr = IPv4Util.getIPIntScope(ipAndMask);&&&&&&& return new String[] { IPv4Util.intToIp(ipIntArr[0]),&&&&&&&&&&&&&&& IPv4Util.intToIp(ipIntArr[0]) };&&& }&&& /**&&&& * 根据IP 子网掩码(192.168.1.1 255.255.255.0)转化为IP段&&&& * @param ipAddr ipAddr&&&& * @param mask mask&&&& * @return int[]&&&& */&&& public static int[] getIPIntScope(String ipAddr, String mask) {&&&&&&& int ipI&&&&&&& int netMaskInt = 0, ipcount = 0;&&&&&&& try {&&&&&&&&&&& ipInt = IPv4Util.ipToInt(ipAddr);&&&&&&&&&&& if (null == mask || "".equals(mask)) {&&&&&&&&&&&&&&& return new int[] { ipInt, ipInt };&&&&&&&&&&& }&&&&&&&&&&& netMaskInt = IPv4Util.ipToInt(mask);&&&&&&&&&&& ipcount = IPv4Util.ipToInt("255.255.255.255") - netMaskI&&&&&&&&&&& int netIP = ipInt & netMaskI&&&&&&&&&&& int hostScope = netIP +&&&&&&&&&&& return new int[] { netIP, hostScope };&&&&&&& } catch (Exception e) {&&&&&&&&&&& throw new IllegalArgumentException("invalid ip scope express& ip:"&&&&&&&&&&&&&&&&&&& + ipAddr + "& mask:" + mask);&&&&&&& }&&& }&&& /**&&&& * 根据IP 子网掩码(192.168.1.1 255.255.255.0)转化为IP段&&&& * @param ipAddr ipAddr&&&& * @param mask mask&&&& * @return String[]&&&& */&&& public static String[] getIPStrScope(String ipAddr, String mask) {&&&&&&& int[] ipIntArr = IPv4Util.getIPIntScope(ipAddr, mask);&&&&&&& return new String[] { IPv4Util.intToIp(ipIntArr[0]),&&&&&&&&&&&&&&& IPv4Util.intToIp(ipIntArr[0]) };&&& }&&& /**&&&& * @param args&&&& * @throws Exception&&&& */&&& public static void main(String[] args) throws Exception {&&&&&&& String ipAddr = "192.168.8.1";&&&&&&& byte[] bytearr = IPv4Util.ipToBytesByInet(ipAddr);&&&&&&& StringBuffer byteStr = new StringBuffer();&&&&&&& for (byte b : bytearr) {&&&&&&&&&&& if (byteStr.length() == 0) {&&&&&&&&&&&&&&& byteStr.append(b);&&&&&&&&&&& } else {&&&&&&&&&&&&&&& byteStr.append("," + b);&&&&&&&&&&& }&&&&&&& }&&&&&&& System.out.println("IP: " + ipAddr + " ByInet --& byte[]: [ " + byteStr&&&&&&&&&&&&&&& + " ]");&&&&&&& bytearr = IPv4Util.ipToBytesByReg(ipAddr);&&&&&&& byteStr = new StringBuffer();&&&&&&& for (byte b : bytearr) {&&&&&&&&&&& if (byteStr.length() == 0) {&&&&&&&&&&&&&&& byteStr.append(b);&&&&&&&&&&& } else {&&&&&&&&&&&&&&& byteStr.append("," + b);&&&&&&&&&&& }&&&&&&& }&&&&&&& System.out.println("IP: " + ipAddr + " ByReg& --& byte[]: [ " + byteStr&&&&&&&&&&&&&&& + " ]");&&&&&&& System.out.println("byte[]: " + byteStr + " --& IP: "&&&&&&&&&&&&&&& + IPv4Util.bytesToIp(bytearr));&&&&&&& int ipInt = IPv4Util.ipToInt(ipAddr);&&&&&&& System.out.println("IP: " + ipAddr + "& --& int: " + ipInt);&&&&&&& System.out.println("int: " + ipInt + " --& IP: "&&&&&&&&&&&&&&& + IPv4Util.intToIp(ipInt));&&&&&&& String ipAndMask = "192.168.1.1/24";&&&&&&& int[] ipscope = IPv4Util.getIPIntScope(ipAndMask);&&&&&&& System.out.println(ipAndMask + " --& int地址段:[ " + ipscope[0] + ","&&&&&&&&&&&&&&& + ipscope[1] + " ]");&&&&&&& System.out.println(ipAndMask + " --& IP 地址段:[ "&&&&&&&&&&&&&&& + IPv4Util.intToIp(ipscope[0]) + ","&&&&&&&&&&&&&&& + IPv4Util.intToIp(ipscope[1]) + " ]");&&&&&&& String ipAddr1 = "192.168.1.1", ipMask1 = "255.255.255.0";&&&&&&& int[] ipscope1 = IPv4Util.getIPIntScope(ipAddr1, ipMask1);&&&&&&& System.out.println(ipAddr1 + " , " + ipMask1 + "& --& int地址段 :[ "&&&&&&&&&&&&&&& + ipscope1[0] + "," + ipscope1[1] + " ]");&&&&&&& System.out.println(ipAddr1 + " , " + ipMask1 + "& --& IP地址段 :[ "&&&&&&&&&&&&&&& + IPv4Util.intToIp(ipscope1[0]) + ","&&&&&&&&&&&&&&& + IPv4Util.intToIp(ipscope1[1]) + " ]");&&& }}
阅读(9534)
&re: JAVA中IP和整数相互转化
IP地址数值应该用long吧,int溢出了&&&&新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 62, 距离下一级还需 138 积分
论坛徽章:0
MySQL版本:5.1.30
GUI工具:Navicat for MySQL 8.0.29
table name:client
column name:IP(点段式的四节IP)
现在我有两个需求:
一、使用INET_ATON函数将四节点段式IP转为有符号整数或无符号整数存储
二、不用存储,但在建立的视图中使用INET_ATON函数将IP转换成整数,但它转换后的值是无符号整数,也就是值的范围0到,
这本来是挺好的,但我要导出到Access中去,Access的长整型仅支持-到,也就是相当于MySQL的Signed INT
我使用的语句如下:
INET_ATON(`client`.`IP`) AS CLIENT_IP,
谁能教我一下?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
富足长乐, 积分 7395, 距离下一级还需 605 积分
论坛徽章:1
用字符。没有更大的。
小富即安, 积分 2562, 距离下一级还需 2438 积分
论坛徽章:0
不想用字符串的话,把减去再存好了
白手起家, 积分 62, 距离下一级还需 138 积分
论坛徽章:0
现在就是有点儿头痛,如果INET_ATON(IP)算出的值在0~之间,则不变,如果在至之间,则需要送去,不知这个表达式怎么写。
富足长乐, 积分 7395, 距离下一级还需 605 积分
论坛徽章:1
原帖由 vinhlam 于
22:13 发表
现在就是有点儿头痛,如果INET_ATON(IP)算出的值在0~之间,则不变,如果在至之间,则需要送去,不知这个表达式怎么写。
&&if (INET_ATON(a.`ip_start`)&&& ,INET_ATON(a.`ip_start`),) as ip_start ,
&if (INET_ATON(a.`ip_end`)&&& ,INET_ATON(a.`ip_end`),) as ip_end
from& & `t_province_ip_new` a
白手起家, 积分 62, 距离下一级还需 138 积分
论坛徽章:0
非常谢谢版主大驾帮助,不过,昨晚打错一个字了,引起了歧义。“如果在至之间,则需要送去”,
应是减去才对,也就是把它变成负值,使其范围在有符号整数所在的-2^31---2^31-1之间。而不是返回这个值。
富足长乐, 积分 7395, 距离下一级还需 605 积分
论坛徽章:1
那在后面减去就行了。
if (INET_ATON(a.`ip_start`)&&& ,INET_ATON(a.`ip_start`),INET_ATON(a.`ip_start`)-) as ip_start
白手起家, 积分 62, 距离下一级还需 138 积分
论坛徽章:0
减去的这个语法有问题,本来结果应该是负值在的,而且范围在-到0之间的,结果却变成了一个21号的正整数,增大了N倍。不知怎么回事。
白手起家, 积分 62, 距离下一级还需 138 积分
论坛徽章:0
例如,203.200.235.191这个地址,使用INET_ATON(a.`ip_start`)之后,值变成了,如果使用如下表达式之后:INET_ATON(a.`ip_start`)-`)-
,值非但没有变成负数,反而增大了:335267,而我需要的正确值是:-
[ 本帖最后由 vinhlam 于
11:08 编辑 ]
富足长乐, 积分 7395, 距离下一级还需 605 积分
论坛徽章:1
mysql& select INET_ATON(&203.200.235.191&) - - -
+-----------------------------------------------+
| INET_ATON(&203.200.235.191&) - - -
+-----------------------------------------------+
|& && && && && && && && && && && && &- |
+-----------------------------------------------+
1 row in set (0.00 sec)ip地址与整数之间的转换
IP地址转换为整数:IP地址每段可以堪称是8位无符号整数即0~255,把每段拆分成一个二进制形式,组合起来,然后把这个二进制数变啊层一个无符号32位整数。
整数转换为IP地址:把这个整数转换成一个无符号32位二进制数。从左到右,每八位进行一下分割,得到4段8位的二进制数,把这些二进制数转换成整数然后加上“.”就可以了。
IP地址转换成二进制的代码:
#include&iostream&
#include&stdio.h&
#include&stdlib.h&
#include&cassert&
int *dec2bin(int decnum)
& & int i,a,*b={0};
for(i=7;i&=0;i--)
& b[i]=a%2;
int ipToInt(char *ipString)
assert(ipString!=NULL);
i=0,j,n,l,count=0,return_num=0;
& & char *
*tmp_num,*num,*d2b;
*s=ipString,*s_
& & if(*s=='.')
& & count++;
& & count++;
& & if(count!=4)
& &return 0;
& & while(*s!='\0')
& if(*s!='.')
&tmp=(char*)malloc(n*sizeof(char));
&memcpy(tmp,s,n);
&tmp_num[i]=atoi(tmp);
&d2b=dec2bin(tmp_num[i]);
&for(j=0;j&8;j++)
& & num[8*i+j]=d2b[j];
& & if(*s='\0')
& tmp=(char*)malloc(n*sizeof(char));
& memcpy(tmp,s,n);
& tmp_num[i]=atoi(tmp);
& d2b=dec2bin(tmp_num[i]);
& for(j=0;j&8;j++)
& num[8*i+j]=d2b[j];
for(j=0;j&32;j++)
&return_num=return_num*2+num[j];
& & return return_
int main(void)
& & char *
string="192.168.12.56";
& & int num,i;
num=ipToInt(string);
& & printf("The result
//for(i=0;i&32;i++)
&printf("%d",num[i]);
& & system("pause");
& & return 0;
方法2:C++中IP地址的转换及判断(转自:http://blog.chinaunix.net/uid-439869-id-2403088.html)
1)IP地址,是由网络地址的部分加上主机地址的部分组成的。例如:
& &172.24.12.61(A/28)
这个描述方式表示了这个IP地址所属的网络是一个28位掩码的网络。所谓网络掩码,是一个连1+连0组成的IP地址类型的地址,一个掩码的末尾有多少位连续的0(e.g.
x个),就表示这个子网可以有2^x个主机地址。IP地址最长也只有32位,所以A/28就表示前面28位都是1,那么最后就有4个0,所以这个网络的掩码就是255.255.255.240.
那么上面那个IP地址的子网地址是怎么得出来的呢?就是用IP地址和子网掩码做一下“与”运算,即:
172.24.12.61&255.255.255.240=172.24.12.48
可见,这个子网的网络地址就是172.24.12.48,那么172.24.12.61的主机地址就是13.
补充一下,所谓“与”运算,其实是把十进制的数字换算成二进制以后的“与”。
一个子网里,子网网络地址通常是不分配给主机用的,而且,子网的广播地址也是不分配的。子网的广播地址指的就是子网网络地址的后面那几个0的作为主机地址的值都是1的IP地址。那么在这个例子里,子网广播地址就是:172.24.12.63。
要判断两个IP地址是否属于同一子网,可以把两个IP地址分别与他们的子网掩码“与”一下,如果得到同一个子网地址,那就属于同一子网的了。
2)在C++中,要把一个IP地址的字符串转换成一个可以直接用来做“与”运算的数字,可以用这个函数。
inet_addr()将网络地址转换成二进制的数字
相关函数 inet_aton, inet_ntoa
#include&sys/socket.h&
#include&netinet/in.h&
#include&arpa/inet.h&
定义函数 unsigned long int inet_addr(const char *cp);
inet_addr()用来将参数cp所指的网络地址字符串转换成网络所使用的二进制数字。网络地址字符串是以数字和点组成的字符串。
返回值:成功则返回对应的网络二进制的数字。失败返回-1.
3)C++中,反过来,如果要把一个这种运算完成的二进制数字直接生成一个IP地址的字符串的话,可以用下面这个函数。
inet_ntoa()将网络二进制的数字转换成网络地址
相关函数 inet_addr,inet_aton
#include&sys/socket.h&
#include&netinet/in.h&
#include&arpa/inet.h&
定义函数 char * inet_ntoa(struct in_addr_in);
inet_ntoa()用来将参数in所指的网络二进制数字转换成网络地址,然后将指向此网络地址字符串的指针返回。
返回值:成功则返回字符串指针,失败则返回NULL。
结构in_addr定义如下
struct in_addr
unsigned long int s_
4)代码例子:
& &unsigned long int
ip=inet_addr(ipString.c_str());
& &in_addr subnetIp;
& &subnetIp.s_addr=ip
&subnetIpAddr=inet_ntoa(subnetIp);
需要注意的是,在使用以上两个函数的时候,要在引用的头文件里加上上面所提到的三个头文件:
#include&sys/socket.h&
#include&netinet/in.h&
#include&arpa/inet.h&
此外,在编译的时候,还需要在makefile里加上两个链接库问价(nsl和socket)。否则的话会出现ld的错误。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。&&&&IP地址转换成整数,整数转换成IP地址
&IP地址转换成整数,整数转换成IP地址
IP地址转换成整数,整数转换成IP地址,16进制转换成IP地址,IP地址转换成16进制
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
IP地址转换成整数,整数转换成IP地址
所需积分:1
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
IP地址转换成整数,整数转换成IP地址
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员java字符串应用之IP地址转换成整数 - 天道酬勤 - ITeye技术网站
博客分类:
一、应用范围
一般用在登录限制、查找IP所在城市等需求中,windows的ping命令也支持整数形式的IP。 二、关键技术点
将IP地址转化成整数的方法如下:
1、通过String的indexOf方法找出IP字符串中的点"."的位置。
2、根据点的位置,使用String的substring方法把IP字符串分成4段。
3、使用Long的parseLong方法把子段转化成一个3位整数。
4、通过左移位操作(&&)给每一段的数字加权,第一段的权为2的24次方,第二段的权为2的16次方,第三段的权为2的8次方,最后一段的权为1
将整数形式的IP地址转化成字符串的方法如下:
1、将整数值进行右移位操作(&&&),右移24位,右移时高位补0,得到的数字即为第一段IP。
2、通过与操作符(&)将整数值的高8位设为0,再右移16位,得到的数字即为第二段IP。
3、通过与操作符吧整数值的高16位设为0,再右移8位,得到的数字即为第三段IP。
4、通过与操作符吧整数值的高24位设为0,得到的数字即为第四段IP。 三、实例演示
package book.oo.S
public class IP2Long ...{
public static long ipToLong(String strIp) ...{
long[] ip = new long[4];
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];
public static String longToIP(long longIp) ...{
StringBuffer sb = new StringBuffer("");
sb.append(String.valueOf((longIp &&& 24)));
sb.append(".");
sb.append(String.valueOf((longIp & 0x00FFFFFF) &&& 16));
sb.append(".");
sb.append(String.valueOf((longIp & 0x0000FFFF) &&& 8));
sb.append(".");
sb.append(String.valueOf((longIp & 0x000000FF)));
return sb.toString();
public static void main(String[] args) ...{
String ipStr = "192.168.0.1";
long longIp = IP2Long.ipToLong(ipStr);
System.out.println("192.168.0.1 的整数形式为:" + longIp);
System.out.println("整数" + longIp + "转化成字符串IP地址:"
+ IP2Long.longToIP(longIp));
System.out.println("192.168.0.1 的二进制形式为:" + Long.toBinaryString(longIp));
* 文件名:IP2Long.java
package book.oo.S
* @author joe
public class IP2Long ...{
//将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];
//将十进制整数形式转换成127.0.0.1形式的ip地址
public static String longToIP(long longIp) ...{
StringBuffer sb = new StringBuffer("");
//直接右移24位
sb.append(String.valueOf((longIp &&& 24)));
sb.append(".");
//将高8位置0,然后右移16位
sb.append(String.valueOf((longIp & 0x00FFFFFF) &&& 16));
sb.append(".");
//将高16位置0,然后右移8位
sb.append(String.valueOf((longIp & 0x0000FFFF) &&& 8));
sb.append(".");
//将高24位置0
sb.append(String.valueOf((longIp & 0x000000FF)));
return sb.toString();
* @param args
public static void main(String[] args) ...{
String ipStr = "192.168.0.1";
long longIp = IP2Long.ipToLong(ipStr);
System.out.println("192.168.0.1 的整数形式为:" + longIp);
System.out.println("整数" + longIp + "转化成字符串IP地址:"
+ IP2Long.longToIP(longIp));
//ip地址转化成二进制形式输出
System.out.println("192.168.0.1 的二进制形式为:" + Long.toBinaryString(longIp));
输出结果:
192.168.0.1 的整数形式为:
整数转化成字符串IP地址:192.168.0.1
192.168.0.1 的二进制形式为:
浏览: 440222 次
来自: 北京
实现客户端扫码登录分为下列四步:1. Web页面生成二维码生成 ...
java实现操作excel文件,PageOffice插件可以实 ...
代码不全吧。跑不起来
404的确无效果
监控不了SQL

我要回帖

更多关于 ip整数转换 的文章

 

随机推荐