package com.thealgorithms.conversions;
/**
* Converts an IPv4 address to its binary equivalent and vice-versa.
* IP to Binary: Converts an IPv4 address to its binary equivalent.
* Example: 127.3.4.5 -> 01111111.00000011.00000100.00000101
*
* Binary to IP: Converts a binary equivalent to an IPv4 address.
* Example: 01111111.00000011.00000100.00000101 -> 127.3.4.5
*
* @author Hardvan
*/
public final class IPConverter {
private IPConverter() {
}
/**
* Converts an IPv4 address to its binary equivalent.
* @param ip The IPv4 address to convert.
* @return The binary equivalent of the IPv4 address.
*/
public static String ipToBinary(String ip) {
StringBuilder binary = new StringBuilder();
for (String octet : ip.split("\\.")) {
binary.append(octetToBinary(Integer.parseInt(octet))).append(".");
}
return binary.substring(0, binary.length() - 1);
}
/**
* Converts a single octet to its 8-bit binary representation.
* @param octet The octet to convert (0-255).
* @return The 8-bit binary representation as a String.
*/
private static String octetToBinary(int octet) {
char[] binary = {'0', '0', '0', '0', '0', '0', '0', '0'};
for (int i = 7; i >= 0; i--) {
if ((octet & 1) == 1) {
binary[i] = '1';
}
octet >>>= 1;
}
return new String(binary);
}
/**
* Converts a binary equivalent to an IPv4 address.
* @param binary The binary equivalent to convert.
* @return The IPv4 address of the binary equivalent.
*/
public static String binaryToIP(String binary) {
StringBuilder ip = new StringBuilder();
for (String octet : binary.split("\\.")) {
ip.append(Integer.parseInt(octet, 2)).append(".");
}
return ip.substring(0, ip.length() - 1);
}
}