int i=2130706433 ;
byte []b=new byte[4];
b[3]=(byte)(i&0xff);
b[2]=(byte)(i>>8&0xff);
b[1]=(byte)(i>>16&0xff);
b[0]=(byte)(i>>24&0xff);
System.out.println(InetAddress.getByAddress(b).getHostAddress());
测试通过
byte []b=new byte[4];
b[3]=(byte)(i&0xff);
b[2]=(byte)(i>>8&0xff);
b[1]=(byte)(i>>16&0xff);
b[0]=(byte)(i>>24&0xff);
System.out.println(InetAddress.getByAddress(b).getHostAddress());
测试通过
解决方案 »
- derby中的列怎么用update的方式改成自动增长列啊?
- 讨论java两个奇怪的语法现象
- hash map问题
- 关于jdonjive的配置,请高手帮忙!!!!
- weblogic7如何配置默认文档,比如index.html,default.htm,index.jsp等,谢谢
- 有关背景色的问题
- 刚开始学JAVA,问个极菜的问题,帮帮忙!
- 大家来谈一下在java中怎样实现拖曳技术!
- 重奖:我的数字签名程序无法在IE中显示出来,而且控制台无报错信息和测试信息
- 请问DocumentListener监听哪些操作,谢了
- 求驱动!JDBC for SQL Server 7.0!
- 用java做windows系统开发需要学什么知识
public class A
{
public static void main(String [] args)
{
long t=2130706433;
byte c=127;
byte a[]=new byte[4];
a[3]=(byte)(t&c);
a[2]=(byte)((t>>8)&c);
a[1]=(byte)((t>>16)&c);
a[0]=(byte)((t>>24)&c);
for(int i=0;i<4;i++)
{
if(i!=3)
System.out.print(a[i]+".");
else
System.out.print(a[i]);
}
}
}
另外,楼上给的是转化成IP地址的,有没有将IP地址转换过来的呢?
----
你的意思是不是把String转换成InetAddress类对象?
InetAddress ip=InetAddress.getByName("127.0.0.1");oracle不清楚
这个也简单啊,由字符串得到InetAddress对象
然后getAddress()得到byte[]
再使用上面的逆过程得到一个long型。大于127的值倒是没有注意处理,我再想象
byte []b=new byte[4];
b[3]=(byte)(i&0xff);
b[2]=(byte)(i>>8&0xff);
b[1]=(byte)(i>>16&0xff);
b[0]=(byte)(i>>24&0xff);
for(int k=0;k<b.length;k++) {
System.out.print((b[k]<0?b[k]+256:b[k])+(k!=b.length?".":"");
}
测试通过,可以处理大于127的数值
原理就是大于127的byte会做补码处理,得到的就是一个负数
那么我判断如果这个byte是负数,就加256得到原来的数,同时也转成int来处理
// int i = 0;
// byte b[] = {127,0,0,1};
// i = i|1;
// i = i|0<<8;
// i = i|0<<16;
// i = i|127<<24;
// System.out.println(i); int i = 0;
byte b[] = {192-255,168-255,0,2};
i = i|1;
i = i|0<<8;
i = i|0<<16;
i = i|127<<24;
System.out.println(i);
byte []ia = InetAddress.getByName("127.0.0.1").getAddress();
System.err.println(ia[0]<0 ? ((long)(Math.abs(129+ia[0]) << 24)+(127<<24)) : ia[0]<<24);
System.err.println(ia[1]<0 ? ((long)(Math.abs(129+ia[1]) << 16)+(127<<16)) : ia[1]<<16);
System.err.println(ia[2]<0 ? ((long)(Math.abs(129+ia[2]) << 8)+(127<<8)) : ia[2]<<8);
System.err.println(ia[3]);