Tukar kepada integer dan kemudian isi. Ia juga disyorkan bahawa untuk medan seperti IP, simpan integer terus dalam pangkalan data dan bukannya rentetan
Beri anda contoh penukaran:
public long ipToLong(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\.");
for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
result |= ip << (i * 8);
}
return result;
}
public String longToIp(long ip) {
StringBuilder sb = new StringBuilder(15);
for (int i = 0; i < 4; i++) {
sb.insert(0, Long.toString(ip & 0xff));
if (i < 3) {
sb.insert(0, '.');
}
ip = ip >> 8;
}
return sb.toString();
}
Anda boleh menukar alamat IP kepada jenis int dahulu dan kemudian menyimpannya dalam pangkalan data. Atau ambil rentetan dalam pangkalan data dan tukarkannya menjadi Long di Java dan kemudian bandingkan.
Alamat IP terdiri daripada empat bahagian 0-255, setiap bahagian ialah 1Byte dan empat bahagian itu betul-betul 4Byte, iaitu Integer.
Postgres sudah mempunyai jenis IP, yang harus digunakan sebagai jenis medan semasa reka bentuk
Apa pun, memandangkan anda menyebut masalah ini, cuma tukarkannya kepada jenis IP dan susunkannya
Tukar kepada integer dan kemudian isi. Ia juga disyorkan bahawa untuk medan seperti IP, simpan integer terus dalam pangkalan data dan bukannya rentetan
Beri anda contoh penukaran:
Anda boleh menukar alamat IP kepada jenis int dahulu dan kemudian menyimpannya dalam pangkalan data. Atau ambil rentetan dalam pangkalan data dan tukarkannya menjadi Long di Java dan kemudian bandingkan.
Alamat IP terdiri daripada empat bahagian 0-255, setiap bahagian ialah 1Byte dan empat bahagian itu betul-betul 4Byte, iaitu Integer.
cangkang boleh mengisih:
Isih dalam vim:
Akhir sekali, saya akan memberi anda versi python: anda boleh mengubah suainya dalam java:
Tukarkannya kepada int dan kemudian susunkannya
Idea: pesanan mengikut setiap medan
Ideanya adalah untuk menukar IP kepada integer dan kemudian mengisih: