IP地址轉換成Long型數字的演算法
阿新 • • 發佈:2019-02-08
在應用程式開發中,涉及到IP地址的儲存,大部分開發人員都將其存為String(或文字型別)。能否將固定格式為m.n.x.y的IP地址轉換成Long型的數字呢?答案是肯定的。在資料庫層面,可以直接將結果設定成表的主鍵,避免IP地址的重複,因為是主鍵,也就是表的索引了,資料庫查詢時會更快。
對於格式為m.n.x.y的IP地址,轉換成Long型數字的演算法如下:
- Long ipLong = 256 * 256 * 256 * m +
- 256 * 256 * n +
- 256 * x +
- y
使用Java語言,則這樣實現:
- privatestatic Long setIP(String ipaddr) {
- String ip[] = ipaddr.split("\\.");
- Long ipLong = 256 * 256 * 256 * Long.parseLong(ip[0]) +
- 256 * 256 * Long.parseLong(ip[1]) +
- 256 * Long.parseLong(ip[2]) +
- Long.parseLong(ip[3]);
- return ipLong;
- }
那麼,對於已知的一個表示IP地址的Long型數字,又該如何將其還原成String(字元型)的IP地址呢?演算法也很簡單,整除和取餘。使用Java語言,則這樣實現:
- privatestatic String getIP(Long ipaddr) {
- long y = ipaddr % 256;
- long m = (ipaddr - y) / (256 * 256 * 256);
- long n = (ipaddr - 256 * 256 *256 * m - y) / (256 * 256);
- long x = (ipaddr - 256 * 256 *256
- return m + "." + n + "." + x + "." + y;
- }
演算法測試:
- publicstaticvoid main(String[] args) {
- Long ipLong = setIP("183.62.169.146");
- System.out.println(ipLong);
- System.out.println(getIP(ipLong));
- }
結果:
3074337170
183.62.169.146