IPv4 地址與 int 值轉換【Python】

進公司時,等爺面試我問了這個題,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))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章