Reputation: 66555
Does anyone know how to get the IP address in decimal or hex from standard IP address format string ("xxx.xxx.xxx.xxx")?
I've tried to use the inet_addr() function but didn't get the right result.
I tested it on "84.52.184.224"
the function returned 3770168404 which is not correct (the correct result is 1412741344).
Thanks!
Upvotes: 5
Views: 27974
Reputation: 300825
You have just got the bytes reversed from what you expected - they are in network byte order
3770168404 = 0xE0 B8 34 54 network byte order
| |
\ /
\ /
\ /
\ /
/\
/ \
/ \
/ \
| |
1412741344 = 0x54 34 B8 E0 machine order
You could use ntohl() convert from network order to machine order.
Upvotes: 25
Reputation:
Carefully check the below link:
http : // msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx
Upvotes: 0
Reputation: 5657
The htonl, htons, ntohl, ntohs functions can be used to convert between network and local byte orders.
Upvotes: 9
Reputation: 75704
The returned result is correct, the bytes are ordered in network byte order
84 => 0x54
52 => 0x34
184 => 0xb8
224 => 0xe0
0xe0b83454 => 3770168404
Upvotes: 4
Reputation: 16360
I think you may be running into a byte order issue. From the man page:
All Internet addresses are returned in network order (bytes ordered from left to right). All network numbers and local address parts are returned as machine byte order integer values.
Upvotes: 2