1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 点分十进制字符串IP和32位int整数互转Java实现

点分十进制字符串IP和32位int整数互转Java实现

时间:2023-09-16 14:41:30

相关推荐

点分十进制字符串IP和32位int整数互转Java实现

点分十进制字符串IP和32位int整数互转Java实现

比较简单基础的题,可记录和回顾基础。

IPv4(4*8)和32位的int整数刚好可以11映射,但由于int整数是有符号的,所以不能直接通过划分为四个整数,然后乘以权值(256^(0-3)),再相加来实现互转,该过程会出现int整数溢出。如果是IPv4转换为long型倒不用考虑这个问题。

这里直接通过简单的位运算来实现,首先再mark下java里的进制表示法(引自java进制表示):

System.out.println(0b101);//二进制:5 (0b开头的)System.out.println(0e1011);//0.0System.out.println(011);//八进制:9 (0开头的)System.out.println(11);//十进制:11System.out.println(0x11C);//十六进制:284 (0x开头的)System.out.printf("%010x\n",7);//0000000007 按10位十六进制输出,向右靠齐,左边用0补齐System.out.printf("%010o\n",13);//0000000015 按10位八进制输出,向右靠齐,左边用0补齐System.out.printf("%x\n",7);//7 按16进制输出System.out.printf("%o\n",13);//15 按8进制输出System.out.println(Integer.toBinaryString(11));//1011 二进制

代码实现为:

public class TransIPtoInt{private int iPToInt(String ip) throws Exception{ip = ip.trim();String regular = "([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";String[] iparray = ip.split("\\.");if (!ip.matches(regular) || iparray.length != 4){throw new Exception("Wrong IP.");}return Integer.parseInt(iparray[0]) << 24 | Integer.parseInt(iparray[1]) << 16| Integer.parseInt(iparray[2]) << 8 | Integer.parseInt(iparray[3]);}private String intToIP(int ipnum){return (int) ((ipnum & 0xff000000L) >> 24) + "." + (int) ((ipnum & 0xff0000L) >> 16) + "."+ (int) ((ipnum & 0xff00L) >> 8) + "." + (int) (ipnum & 0xffL);}public static void main(String[] args) throws Exception{TransIPtoInt tp = new TransIPtoInt();String ip = "232.132.72.255";int ipnum = tp.iPToInt(ip);System.out.println(ipnum);System.out.println(tp.intToIP(ipnum));}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。