Skip to content

Commit 9b52ac9

Browse files
authored
feat: Add IPConverter new algorithm with Junit tests (#5750)
1 parent e291516 commit 9b52ac9

File tree

3 files changed

+90
-0
lines changed

3 files changed

+90
-0
lines changed

DIRECTORY.md

+2
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@
9494
* [HexToOct](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/HexToOct.java)
9595
* [IntegerToEnglish](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/IntegerToEnglish.java)
9696
* [IntegerToRoman](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/IntegerToRoman.java)
97+
* [IPConverter](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/IPConverter.java)
9798
* [OctalToBinary](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/OctalToBinary.java)
9899
* [OctalToDecimal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/OctalToDecimal.java)
99100
* [OctalToHexadecimal](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/conversions/OctalToHexadecimal.java)
@@ -727,6 +728,7 @@
727728
* [HexToOctTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/HexToOctTest.java)
728729
* [IntegerToEnglishTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/IntegerToEnglishTest.java)
729730
* [IntegerToRomanTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/IntegerToRomanTest.java)
731+
* [IPConverterTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/IPConverterTest.java)
730732
* [OctalToBinaryTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/OctalToBinaryTest.java)
731733
* [OctalToDecimalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/OctalToDecimalTest.java)
732734
* [OctalToHexadecimalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/conversions/OctalToHexadecimalTest.java)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.thealgorithms.conversions;
2+
3+
/**
4+
* Converts an IPv4 address to its binary equivalent and vice-versa.
5+
* IP to Binary: Converts an IPv4 address to its binary equivalent.
6+
* Example: 127.3.4.5 -> 01111111.00000011.00000100.00000101
7+
*
8+
* Binary to IP: Converts a binary equivalent to an IPv4 address.
9+
* Example: 01111111.00000011.00000100.00000101 -> 127.3.4.5
10+
*
11+
* @author Hardvan
12+
*/
13+
public final class IPConverter {
14+
private IPConverter() {
15+
}
16+
17+
/**
18+
* Converts an IPv4 address to its binary equivalent.
19+
* @param ip The IPv4 address to convert.
20+
* @return The binary equivalent of the IPv4 address.
21+
*/
22+
public static String ipToBinary(String ip) {
23+
StringBuilder binary = new StringBuilder();
24+
for (String octet : ip.split("\\.")) {
25+
binary.append(octetToBinary(Integer.parseInt(octet))).append(".");
26+
}
27+
return binary.substring(0, binary.length() - 1);
28+
}
29+
30+
/**
31+
* Converts a single octet to its 8-bit binary representation.
32+
* @param octet The octet to convert (0-255).
33+
* @return The 8-bit binary representation as a String.
34+
*/
35+
private static String octetToBinary(int octet) {
36+
char[] binary = {'0', '0', '0', '0', '0', '0', '0', '0'};
37+
for (int i = 7; i >= 0; i--) {
38+
if ((octet & 1) == 1) {
39+
binary[i] = '1';
40+
}
41+
octet >>>= 1;
42+
}
43+
return new String(binary);
44+
}
45+
46+
/**
47+
* Converts a binary equivalent to an IPv4 address.
48+
* @param binary The binary equivalent to convert.
49+
* @return The IPv4 address of the binary equivalent.
50+
*/
51+
public static String binaryToIP(String binary) {
52+
StringBuilder ip = new StringBuilder();
53+
for (String octet : binary.split("\\.")) {
54+
ip.append(Integer.parseInt(octet, 2)).append(".");
55+
}
56+
return ip.substring(0, ip.length() - 1);
57+
}
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.thealgorithms.conversions;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
public class IPConverterTest {
8+
9+
private static String generateTestIP(int a, int b, int c, int d) {
10+
return String.format("%d.%d.%d.%d", a, b, c, d);
11+
}
12+
13+
private static String generateTestBinary(int a, int b, int c, int d) {
14+
return String.format("%8s.%8s.%8s.%8s", Integer.toBinaryString(a), Integer.toBinaryString(b), Integer.toBinaryString(c), Integer.toBinaryString(d)).replace(' ', '0');
15+
}
16+
17+
@Test
18+
public void testIpToBinary() {
19+
assertEquals(generateTestBinary(192, 168, 1, 1), IPConverter.ipToBinary(generateTestIP(192, 168, 1, 1)));
20+
assertEquals(generateTestBinary(127, 3, 4, 5), IPConverter.ipToBinary(generateTestIP(127, 3, 4, 5)));
21+
assertEquals(generateTestBinary(0, 0, 0, 0), IPConverter.ipToBinary(generateTestIP(0, 0, 0, 0)));
22+
}
23+
24+
@Test
25+
public void testBinaryToIP() {
26+
assertEquals(generateTestIP(192, 168, 1, 1), IPConverter.binaryToIP(generateTestBinary(192, 168, 1, 1)));
27+
assertEquals(generateTestIP(127, 3, 4, 5), IPConverter.binaryToIP(generateTestBinary(127, 3, 4, 5)));
28+
assertEquals(generateTestIP(0, 0, 0, 0), IPConverter.binaryToIP(generateTestBinary(0, 0, 0, 0)));
29+
}
30+
}

0 commit comments

Comments
 (0)