java把ip地址存放到一个int型变量
package com.zwx;
public class test {
public static void main(String[] args) {
byte[] bt = new byte[4];
bt[0] = 111;
bt[1] = 112;
bt[2] = 113;
bt[3] = 114;
int i = byteArrayToInt(bt);
System.out.println("int--->" + i);
byte[] b = intToByteArrayl(i);
System.out.print("ip--->");
for (byte bb : b) {
System.out.print(bb + ".");
}
}
//int转ip(字节数组)
public static byte[] intToByteArrayl(int i) {
byte[] result = new byte[4];
result[0] = (byte)((i >> 24) & 0xFF);
result[1] = (byte)((i >> 16) & 0xFF);
result[2] = (byte)((i >> 8) & 0xFF);
result[3] = (byte)(i & 0xFF);
return result;
}
//ip(字节数组)转int
public static int byteArrayToInt(byte[] b) {
int value = 0;
for (int i = 0; i < 4; i++) {
value |= b[i];
if ( i < 3 ) {
value = value << 8;
}
}
return value;
}
}
运行结果:
int--->1869640050
ip--->111.112.113.114.
------------------------补充---------------------------
考虑到1楼提出的byte的范围为-128-127,而IP有可能是192.168.1.1,也就是说java都是有符号的,我们可以把有符号的变成无符号的,也就是-1就相当于255,其实如果是用c就简单多了,直接unsigned就可以了,c在这些方面确实比较强大,一篇很不错的原码, 反码和补码的文章:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
修正后的代码:
package com.zwx;
public class test {
public static void main(String[] args) {
byte[] bt = new byte[4];
bt[0] = (byte)192;
bt[1] = (byte)128;
bt[2] = 1;
bt[3] = (byte)255; //相当于 bt[3] = -1;
int i = byteArrayToInt(bt);
System.out.println("int--->" + i);
byte[] b = intToByteArrayl(i);
System.out.print("ip--->");
for (byte bb : b) {
System.out.print(Byte.toUnsignedInt(bb) + ".");
//或者:System.out.print((bb & 0xFF) + ".");
}
}
//int转ip(字节数组)
public static byte[] intToByteArrayl(int i) {
byte[] result = new byte[4];
result[0] = (byte)((i >> 24) & 0xFF);
result[1] = (byte)((i >> 16) & 0xFF);
result[2] = (byte)((i >> 8) & 0xFF);
result[3] = (byte)(i & 0xFF);
return result;
}
//ip(字节数组)转int
public static int byteArrayToInt(byte[] b) {
int value = 0;
for (int i = 0; i < 4; i++) {
value |= (b[i] & 0xFF);
if ( i < 3 ) {
value = value << 8;
}
//System.out.println(Integer.toBinaryString(value));
}
return value;
}
}
修正后运行结果:
int--->-1065352705
ip--->192.128.1.255.