ip和Long進行轉換

2022-09-20 14:33:11 字數 1064 閱讀 5714

​ 我們會有這樣的需求,就是儲存使用者上次登入的ip位址,那麼我們該如何儲存到資料庫呢?那還不簡單,用varchar(15)來儲存不就好了,最大的ip也就15位。這樣可以。but!! 但是,這樣浪費了空間不說(使用者量很大的話),如果要判斷某個使用者的ip是否在某個ip段這樣也就不好做了。所以啊。我們可以將ip轉換成long型別也只是占用4個位元組,而且方便查詢和計算。

其實就是將每個位轉換成2進製,然後進行位移就好了,如果轉換回來也是這樣,往回位移然後取最後的乙個位元組(一位0-255佔乙個位元組8個二進位制位)。

話不多說,上**:

public class iputils )\\.)(2([0-4]\\d|5[0-5])|[01]?\\d)$");

/*** ip轉換成long

** @param ip ip

* @return long

*/public static long iptolong(string ip)

string split = ip.split("\\.");

return (long.parselong(split[0]) << 24) + (long.parselong(split[1]) << 16)

+ (long.parselong(split[2]) << 8) + long.parselong(split[3]);

}/**

* 將long型別轉換成ip

** @param iplong ip的long型別

* @return ip

*/public static string longtoip(long iplong)

public static void main(string args)

}

如果你對上面的0xff感到疑惑的話別急,其實你想啊,0xff不就是255的十六進製制嗎?換行成二進位制不就是1111 1111嗎?那麼任何數與它做與運算(&)不就是去取這個數的二進位制的最後八位嗎?所以,我們只是向右位移,然後取最後八個二進位制位就還原回來了!!

IP轉換成LONG 的 問題

如何將四個欄位以點分開的ip網路址協議位址轉換成整數呢?php裡有這麼乙個函式ip2long.比如 echo ip2long 10.2.1.3 我們將得到 167903491 這是如何計算的,目前我知道有兩個演算法。其一 function ip2int ip 其二,用位運算 function ip2...

php手動實現ip2long和long2ip

php手動實現ip2long和long2ip 測試 public function testipaction 自己實現ip2long param ip return float int string protected function myip2long ip 將十進位制轉化為十六進製制 hex ...

時間轉換Long的問題

dateformat format new dateformat pattern 獲取的是當前裝置的預設時區 如北京時間東八區 而format.parse strtime gettime 獲取strtime的long時間,會把strtime當做是東八區再轉化為世界時間 utc 再計算出毫秒數。如 p...