IPv4アドレスのマスクの変換もやってみた。投稿したあとでゲンゾウさんのを見ると、「Integer/Long.toBinaryString」というメソッドやcountというメソッドを使ってたのでさすがと思いました。以下はそれを取り込んだバージョン。
def netMask(addr) { Long.toString(addr.split(/\./).inject(0){a,b->a*256+(b as long)},2).count('1') } assert netMask("255.255.255.0")==24 assert netMask("255.255.255.128")==25 assert netMask("255.255.255.255")==32
def mask2addr(mask){ mask = (-1 << (32-mask)) (3..0).collect{(mask >> it*8) & 0xff}.join('.') } assert mask2addr(24)=="255.255.255.0" assert mask2addr(25)=="255.255.255.128" assert mask2addr(32)=="255.255.255.255"