interger to I P address
David Champion
dgc at uchicago.edu
Wed Aug 27 18:27:06 UTC 2008
> Actually, who needs loops for that?
> ...
> (unsigned char)(((char*)&i)[3]),
> (unsigned char)(((char*)&i)[2]),
> (unsigned char)(((char*)&i)[1]),
> (unsigned char)(((char*)&i)[0])
Let data structures work for you.
#include <stdio.h>
main(int argc, char *argv[])
{
union {
unsigned int i;
unsigned char c[4];
} ip;
int i = 0;
ip.i = 1089055123;
/* endian-neutral iteration: */
printf("%d.%d.%d.%d\n", ip.c[i++], ip.c[i++], ip.c[i++], ip.c[i++]);
return 0;
}
> $ bc
> bc 1.06
> Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
> This is free software with ABSOLUTELY NO WARRANTY.
> For details type `warranty'.
> obase=256
> 1089055123
> 064 233 169 147
Curse you with your large number bases. But if you don't do GNU:
dc <<EOF
[0 sd
[d 10 % 48 + Sm ld 1 + sd 10 / d 0 <M] sM lMx
[LmP ld 1 - d sd 0 <M] sM lMx
] sN
1089055123
[[.]P] sP
4so [d 256 % Si 256 / lo 1 - dso 0 <O] sO lOx
4so [Li lNx lo 1 - dd so 0 <P 0 <O] sO lOx
[
]P
EOF
--
-D. dgc at uchicago.edu NSIT University of Chicago
More information about the NANOG
mailing list