【mysql】ipv4地址轉換爲4字節整數

有時須要記錄ipv4地址到數據庫,直接保存字符varchar(15)可能有些浪費,若是直接保存一個整數的話性價比會更好一些,ipv4有4段,每段取值範圍都是0~255,使用1個字節就能夠保存,若是轉換爲一個整數4個字節就能夠搞定,注意mysql需使用無符號int。

圖片

注意在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

相關文章
相關標籤/搜索