Форум сайта python.su
Подскажите , не могу понять как написать формулу на питоне
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])
Отредактировано Jeck290 (Окт. 13, 2013 00:16:48)
Офлайн
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 (Окт. 13, 2013 01:31:51)
Офлайн
Budulianinили использовать сдвиг
int(partip) * 256 ** 3
int(partip[0])<<24
reduce(lambda a,b:(a<<8)+int(b), partip, 0)
Отредактировано o7412369815963 (Окт. 13, 2013 11:53:29)
Офлайн
o7412369815963
вот ещё вариант:
reduce(lambda a,b:(a<<8)+int(b), partip, 0)
Офлайн
Да действительно работает ! Но по какой логике сделать декодирование ip адреса обратно ?
Офлайн
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
Спасибо , но одно не ясно что это за сдвиги такие , где за них можно почитать ?
Отредактировано Budulianin (Окт. 14, 2013 09:44:52)
Офлайн
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))))
Отредактировано sergeek (Окт. 14, 2013 11:34:48)
Офлайн
Старайтесь же использовать стандартные модули для стандартных задач
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))
Офлайн