2012-01-15 5 views

답변

4

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

이 그럼 당신은 몇 가지의 배타적 논리합을 연산을 수행 표현을 할 수 있습니다 ... 우리가 가진 것을 말한다. 예 :

>>> 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

+0

그게 아름다운 –

관련 문제