進公司時,等爺面試我問了這個題,IP 地址是如何存儲的?
今天想起來,寫個 Python 的字符串格式 IP 地址與 int 互轉。
IPv4 地址轉 int:用 .
分割後,通過左移生成高位,此時低 8 位全爲 0,用或填充後面的即可;
int 轉 IPv4 地址:用與取出低 8 位,再通過右移讓高位變低位。(取低 8 位:用 1 與、用 0 或都可以,不過不方便用 0 或,沒法指定位數)
"""IPv4 地址與 int 值轉換"""
def ip_to_int(ip):
"""
:type ip: str
:rtype: int
"""
int_ = 0
for i in ip.split('.'):
int_ = int_ << 8 | int(i)
return int_
def int_to_ip(int_):
"""
:type int_: int
:rtype: str
"""
ip = []
for _ in range(4):
ip.append(str(int_ & 255))
int_ >>= 8
return '.'.join(ip[::-1])
if __name__ == '__main__':
ips = ['2.2.2.2', '192.168.0.0', '0.0.0.0', '255.0.0.255']
for ip in ips:
assert ip == int_to_ip(ip_to_int(ip))