Java - как конвертировать сетевую маску в бит / длина
Если вам дана маска сети (например, 255.255.255.0), как вы получите длину / биты этого (например, 8) в Java?
5 ответов
Если вы пытаетесь выяснить, сколько нулевых битов находится в нижнем конце целого числа, попробуйте Integer.numberOfTrailingZeros.
Как видно из некоторых других ответов здесь, этот вопрос несколько расплывчатый, потому что он зависит от того, где вы получаете информацию, а сетевая маска в вашем примере на самом деле 24 бита, а не 8.
Если вам нужна информация о локальном интерфейсе, вы можете использовать getNetworkPrefixLength()
метод InterfaceAddress
,
Если информация передается вам в виде строки, вы должны выделить четыре октета и умножить их на один Long
, с которым вы можете использовать numberOfTrailingZeros()
от Long
определить размер вашей маски.
Приведенный пример - /24, преобразуйте каждый октет в целое число, затем используйте таблицу поиска, поскольку единственные допустимые значения для каждого октета могут быть в диапазоне 0-8 (т.е. 0
-> 0
; 128
-> 1
; 192
-> 3
;...). Наконец, сложите значения для каждого октета, чтобы получить длину префикса в нотации CIDR.
Использование InetAddress.getByName()
получить InetAddress из него, а затем позвонить getAddress()
чтобы получить byte[]
что вы должны быть в состоянии манипулировать, чтобы получить информацию, которую вы хотите. (Я не совсем понимаю, что это за информация, поскольку ни в каком смысле 255.255.255.0 не имеет "длину" 8...)
Ищете что-то вроде?
int netmask = 255;
boolean bit7 = (netmask>>>7)&&0b1;