>>> s = "0200A8C0" >>> bytes = ["".join(x) for x in zip(*[iter(s)]*2)] >>> bytes ['02', '00', 'A8', 'C0'] >>> bytes = [int(x, 16) for x in bytes] >>> bytes [2, 0, 168, 192] >>> print ".".join(str(x) for x in reversed(bytes)) 192.168.0.2
It is short and clear; wrap it in a function with error checking to suit your needs.
Convenient grouping functions:
def group(iterable, n=2, missing=None, longest=True): """Group from a single iterable into groups of n. Derived from http://bugs.python.org/issue1643 """ if n < 1: raise ValueError("invalid n") args = (iter(iterable),) * n if longest: return itertools.izip_longest(*args, fillvalue=missing) else: return itertools.izip(*args) def group_some(iterable, n=2): """Group from a single iterable into groups of at most n.""" if n < 1: raise ValueError("invalid n") iterable = iter(iterable) while True: L = list(itertools.islice(iterable, n)) if L: yield L else: break
Roger Pate
source share