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;
Другие вопросы по тегам