2012-01-15 60 views

回答

4

說,我們有......

def ip_to_int(a, b, c, d): 
    return (a << 24) + (b << 16) + (c << 8) + d 

然後你就可以有代表性做了幾個XOR的。例如。

>>> bin(0xFFFFFFFF^ip_to_int(192, 168, 1, 1)^ip_to_int(192, 168, 1, 254)) 
'0b11111111111111111111111100000000' 

所以:

def mask(ip1, ip2): 
    "ip1 and ip2 are lists of 4 integers 0-255 each" 
    m = 0xFFFFFFFF^ip_to_int(*ip1)^ip_to_int(*ip2) 
    return [(m & (0xFF << (8*n))) >> 8*n for n in (3, 2, 1, 0)] 

>>> mask([192, 168, 1, 1], [192, 168, 1, 254]) 
[255L, 255L, 255L, 0L] 
+0

謝謝,完美的作品;) – Gunnar 2012-01-15 21:22:27

+0

那美麗的設計 – 2012-01-15 23:56:15

相關問題