注意在java中Integer是有符號的,最大值爲2147483647,因此須要Long來盛放轉換後的整數;位移運算優先級低於加法運算,位移處加了括號:java
public static Long getIpNum(final String ip) {
Long ipNum = 0L;
final String[] ipStr = ip.trim().split("\\.");
for (final String str : ipStr) {
ipNum = (ipNum << 8) + Integer.parseInt(str);
}
return ipNum;
}
同時mysql也提供了相關函數,能夠方便進行轉換:
select INET_ATON('255.255.255.255');-- 4294967295
select INET_NTOA(4294967295);-- 255.255.255.255
本文代碼出發點是考慮包括兩個極端的狀況,即0.0.0.0~255.255.255.255,因此代碼中使用Long類型,Long類型佔用8字節,而數據庫支持無符號整型,4字節就能夠保存。由整數轉爲ipv4地址能夠直接使用mysql的函數,也能夠在代碼中使用右移操做取出每一個字節所表明的的整數,而後拼接"."。mysql