Created
December 7, 2017 15:18
-
-
Save luchenqun/bcf51f46382fad558e7f579765baecbb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
不同的CPU有不同的字节序类型,这些字节序是指 整数 在内存中保存的顺序,这个叫做 主机序。最常见的有两种: | |
Little endian:将低序字节存储在起始地址 | |
Big endian:将高序字节存储在起始地址 | |
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。 | |
int inet_aton(const char *cp, struct in_addr *inp); | |
将一个字符串IP地址转换为一个32位的网络序列IP地址。如果这个函数成功,函数的返回值非零,如果输入地址不正确则会返回零。认为255.255.255.255是有效的。 | |
in_addr_t inet_addr(const char *cp); | |
将一个点分十进制的IP转换成一个32位的网络序列IP地址 | |
in_addr_t inet_network(const char *cp); | |
将一个点分十进制的IP转换成一个32位的主机字节序IP地址 | |
htons:把unsigned short类型从主机序转换到网络序 | |
htonl:把unsigned long类型从主机序转换到网络序 | |
ntohs:把unsigned short类型从网络序转换到主机序 | |
ntohl:把unsigned long类型从网络序转换到主机序 | |
*/ | |
#include <memory> | |
#include <iostream> | |
#include <string> | |
#include <arpa/inet.h> | |
using namespace std; | |
int main() | |
{ | |
int ret = 0; | |
const char *strptr = "210.25.132.181"; | |
struct in_addr addr; | |
ret = inet_aton(strptr, &addr); | |
cout << "ret = " << ret << ", addr.s_addr = " << ntohl(addr.s_addr) << endl; | |
in_addr_t addr_t; | |
addr_t = inet_addr(strptr); | |
cout << "inet_addr addr.s_addr = " << ntohl(addr_t) << endl; | |
addr_t = inet_network(strptr); | |
cout << "inet_network addr.s_addr = " << addr_t << endl; | |
return 0; | |
} | |
// 11010010 00011001 10000100 10110101 | |
// 210 25 132 181 | |
// ret = 1, addr.s_addr = 3524887733 | |
// inet_addr addr.s_addr = 3524887733 | |
// inet_addr addr.s_addr = 3524887733 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment