-
-
Notifications
You must be signed in to change notification settings - Fork 46.6k
/
Copy pathipconversion.py
59 lines (43 loc) · 1.42 KB
/
ipconversion.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# https://www.geeksforgeeks.org/convert-ip-address-to-integer-and-vice-versa/
def ip_to_decimal(ip_address: str) -> int:
"""
Convert an IPv4 address to its decimal representation.
Args:
ip_address (str): A string representing an IPv4 address (e.g., "192.168.0.1").
Returns:
int: The decimal representation of the IP address.
>>> ip_to_decimal("192.168.0.1")
3232235521
>>> ip_to_decimal("10.0.0.255")
167772415
"""
ip_parts = ip_address.split('.')
if len(ip_parts) != 4:
raise ValueError("Invalid IPv4 address format")
decimal_ip = 0
for part in ip_parts:
decimal_ip = (decimal_ip << 8) + int(part)
return decimal_ip
def decimal_to_ip(decimal_ip: int) -> str:
"""
Convert a decimal representation of an IP address to its IPv4 format.
Args:
decimal_ip (int): An integer representing the decimal IP address.
Returns:
str: The IPv4 representation of the decimal IP address.
>>> decimal_to_ip(3232235521)
'192.168.0.1'
>>> decimal_to_ip(167772415)
'10.0.0.255'
"""
if not (0 <= decimal_ip <= 4294967295):
raise ValueError("Invalid decimal IP address")
ip_parts = []
for _ in range(4):
ip_parts.append(str(decimal_ip & 255))
decimal_ip >>= 8
ip_parts.reverse()
return '.'.join(ip_parts)
if __name__ == "__main__":
import doctest
doctest.testmod()