nanog mailing list archives

Re: interger to I P address


From: Dave Israel <davei () otd com>
Date: Wed, 27 Aug 2008 11:22:14 -0400


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
shadow () gti net


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);
}



Current thread: