How to convert standard IP address format string to hex and long?

与世无争的帅哥 提交于 2019-12-04 12:37:43

问题


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!


回答1:


The htonl, htons, ntohl, ntohs functions can be used to convert between network and local byte orders.




回答2:


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.




回答3:


The returned result is correct, the bytes are ordered in network byte order

84 => 0x54
52 => 0x34
184 => 0xb8
224 => 0xe0
0xe0b83454 => 3770168404



回答4:


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.




回答5:


Carefully check the below link:

http : // msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx



来源:https://stackoverflow.com/questions/491060/how-to-convert-standard-ip-address-format-string-to-hex-and-long

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!