Skip to content

Instantly share code, notes, and snippets.

@luchenqun
Created December 7, 2017 15:18
Show Gist options
  • Save luchenqun/bcf51f46382fad558e7f579765baecbb to your computer and use it in GitHub Desktop.
Save luchenqun/bcf51f46382fad558e7f579765baecbb to your computer and use it in GitHub Desktop.
/*
不同的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