On 2002.02.25, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > I have come up with a function to convert > the Long IP into Dotted Quad format, [...]
I've been thinking about writing a "proc net" for a while that exposes [net inet_ntoa $long] for a while, but ... I'm lazy. proc inet_ntoa {long} { set hex [format %08x $long] for {set i 0} {$i < 8} {incr i 2} { lappend dec [format %u 0x[string range $hex $i [expr $i + 1]]] } return [join $dec .] } To test: 231.123.213.132 -> 3883652484 % inet_ntoa 3883652484 231.123.213.132 127.0.0.1 -> 2130706433 % inet_ntoa 2130706433 127.0.0.1 255.255.255.255 -> 4294967295 % inet_ntoa 4294967295 255.255.255.255 Performance isn't too bad under Tcl8, either: % puts $tcl_patchLevel 8.3.3 % time {inet_ntoa 4294967295} 10000 771 microseconds per iteration % expr 1 / (711 * pow(10, -6)) 1406.4697609 Unless I'm reading that wrong, it's approximately able to execute 1400 per second. Compare to your dotted_ip_from_long: % dotted_ip_from_long 2130706433 127.0.0.1 % time {dotted_ip_from_long 2130706433} 10000 1265 microseconds per iteration Just 200 usec short of twice as slow. -- Dossy -- Dossy Shiobara mail: [EMAIL PROTECTED] Panoptic Computer Network web: http://www.panoptic.com/ "He realized the fastest way to change is to laugh at your own folly -- then you can let go and quickly move on." (p. 70)