IPアドレスと整形変換java,python実現
1546 ワード
JAva版:
注意javaを用いて変換する場合、intは記号があり、記号が最高位を占めているため、ipアドレスを表すには表現範囲が不十分である.
そして
pythonの書き方は簡単そうですが、socketとstructでできます
参考記事:クリックしてリンクを開く
データベース操作時に変換が必要な場合は、データベース自体に関連する変換関数が用意されています.
例えばMy SQL : INET_ATON(XX) ..... INET_NTOA(XX)
注意javaを用いて変換する場合、intは記号があり、記号が最高位を占めているため、ipアドレスを表すには表現範囲が不十分である.
そして
public long transIP2Long(String ip) {
if(ip.length()<8)
return LENGTH_ILLEGAL_IP;
long addr;
long[] parts = new long[4];// all long ,in case of the number overflowed and become -,not +.
try {
String[] ipArr = ip.split("\\.");
if(ipArr.length>4)
throw new NumberFormatException();
parts[0] = (Integer.parseInt(ipArr[0]) & 0xFF);
parts[1] = (Integer.parseInt(ipArr[1]) & 0xFF);
parts[2] = (Integer.parseInt(ipArr[2]) & 0xFF);
parts[3] = (Integer.parseInt(ipArr[3]) & 0xFF);
} catch (NumberFormatException e) {
//xxxxxxxxxxxxxx
}
addr = parts[3] & 0xFF;
addr |= ((parts[2] << 8) & 0xFF00);
addr |= ((parts[1] << 16) & 0xFF0000);
addr |= ((parts[0] << 24) & 0xFF000000);
return addr;
}
pythonの書き方は簡単そうですが、socketとstructでできます
#!/usr/bin/python
#int to ip,ip to int
import socket
import struct
def int2ip(value):
ip=socket.inet_ntoa(struct.pack('I',socket.htonl(value)))
return ip
def ip2int(ip):
val = socket.ntohl(struct.unpack("I",socket.inet_aton(str(ip)))[0])
return val
参考記事:クリックしてリンクを開く
データベース操作時に変換が必要な場合は、データベース自体に関連する変換関数が用意されています.
例えばMy SQL : INET_ATON(XX) ..... INET_NTOA(XX)