North American Network Operators Group

Date Prev | Date Next | Date Index | Thread Index | Author Index | Historical

Re: interger to I P address

  • From: Dave Israel
  • Date: Wed Aug 27 11:22:35 2008


Normally, I don't participate in this sort of thing, but I'm a sucker for a "there's more than one way to do it" challenge.


Shadow wrote:
Robert D. Scott wrote:
The harder way:

Decimal: 1089055123
Hex (dashes inserted at octals): 40-E9-A9-93
Decimal (of each octet): 64-233-169-147
IP Address: 64.233.169.147


The "this could take all day" way :

(in bc with scale=0 for integer portions only)

1089055123/(2^24)%(2^8)
64
1089055123/(2^16)%(2^8)
233
1089055123/(2^8)%(2^8)
169
1089055123/(2^0)%(2^8)
147

(Note: 2^0=1 & x/1=x so last line could reduce to 1089055123%(2^8).)

-Nicholas
[email protected]


The "ugly, please adjust according to your endianness, etc" way:


int *dec;
unsigned char *oct1, *oct2, *oct3, *oct4;

main(int argc, char **argv) {
 dec = malloc(sizeof(int));
 *dec = 1089055123;
 oct4 = dec;
 oct3 = oct4 + sizeof(char);
 oct2 = oct3 + sizeof(char);
 oct1 = oct2 + sizeof(char);

printf("dec: %lu ip: %hu.%hu.%hu.%hu\n", *dec, *oct1, *oct2, *oct3, *oct4);
}