255.255.255.255 直接以字符串存入数据库使用varchar(15),而ipv4本质是32位的二进制码,int也有32位,但是因为有一个符号位存不下所以只能用long型来存储ip了。8个字节还是比15个字节差不多省了一半空间了。
0xFF,这代表的是十六进制数FF即1111 1111,对应十进制即为255,当一个数n对这个 0xFF 作 & 操作时,相当于求n除以256所得的余数,也就是相当于n%256
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| public class IPUtil {
public static long ipToLong(String strIp) { String[]ip = strIp.split("\\."); return (Long.parseLong(ip[0]) << 24) + (Long.parseLong(ip[1]) << 16) + (Long.parseLong(ip[2]) << 8) + Long.parseLong(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 >>> 16) & 0xFF )); sb.append("."); sb.append(String.valueOf((longIp >>> 8) & 0xFF)); sb.append("."); sb.append(String.valueOf((longIp))); return sb.toString(); }
public static void main(String[] args) { System.out.println(ipToLong("219.239.110.138")); System.out.println(longToIP(18537472)); } }
|