67.222.132.196
67 x (256)3 + 222 x (256)2 + 132 x (256)1 + 196 = 1138656452
пишу
def base10ip(ip="0.0.0.0"): partip = ip.split(".") return int(partip[0]) * (256)%3 + int(partip[1]) * (256)%2 + int(partip[2]) * (256)%1 + int(partip[3])
def base10ip(ip="0.0.0.0"): partip = ip.split(".") return int(partip[0]) * (256)%3 + int(partip[1]) * (256)%2 + int(partip[2]) * (256)%1 + int(partip[3])
Jeck290
int(partip) * (256)%3 + int(partip) * (256)%2 + int(partip) * (256)%1 + int(partip)
int(partip[0]) * 256 ** 3 + int(partip[1]) * 256 ** 2 + int(partip[2]) * 256 ** 1 + int(partip[3])
Budulianinили использовать сдвиг
int(partip) * 256 ** 3
int(partip[0])<<24
reduce(lambda a,b:(a<<8)+int(b), partip, 0)
o7412369815963
вот ещё вариант:
reduce(lambda a,b:(a<<8)+int(b), partip, 0)
Jeck290
Да действительно работает ! Но по какой логике сделать декодирование ip адреса обратно ?
ip_num = 1138656452 ip_num_copy = 1138656452 ip = [] ip_slice = 0 count = 0 while ip_num > (1 << 8): while ip_num_copy > (1 << 8): count += 1 ip_num_copy = ip_num_copy >> 8 ip_slice = ip_num_copy ip_num = ip_num_copy = ip_num - (ip_slice << (8 * count)) ip.append(str(ip_slice)) count = 0 ip.append(str(ip_num)) print '.'.join(ip)
Jeck290
Спасибо , но одно не ясно что это за сдвиги такие , где за них можно почитать ?
def decode(ip): def orders(n): xs, x = divmod(n, 256) return [x] + orders(xs) if x else [] return '.'.join(map(str, reversed(orders(ip))))
from socket import inet_aton, inet_ntoa from struct import unpack, pack def ip2int(ip_addr): return unpack("!L", inet_aton(ip_addr))[0] def int2ip(ip): return inet_ntoa(pack("!L", ip))