tcp/ip中的 ip字符串转整数函数 inet_aton 源代码
2012-05-24 15:54
447 查看
// ip地址结构体 struct in_addr { unsigned int s_addr; // network byte order( big-endian) }; // inet_aton将 点分十进制串cp 转换为一个网络字节顺序的32位整数 IP地址 // 例如将串cp "192.168.33.123 " // 转为 1100 0000 1010 1000 0010 0001 0111 1011 // 成功返回1,出错返回0 // 转换成功,结果保存在结构体指针ap中 int inet_aton(const char *cp, struct in_addr *ap) { int dots = 0; register u_long acc = 0, addr = 0; do { register char cc = *cp; switch (cc) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': acc = acc * 10 + (cc - '0'); break; case '.': if (++dots > 3) { return 0; } // Fall through case '/0': if (acc > 255) { return 0; } addr = addr << 8 | acc; // 这句是精华,每次将当前值左移八位加上后面的值 acc = 0; break; default: return 0; } } while (*cp++) ; // Normalize the address if (dots < 3) { addr <<= 8 * (3 - dots) ; } //Store it if requested if (ap) { ap->s_addr = htonl(addr); } return 1; }
相关文章推荐
- tcp/ip中的 ip字符串转整数函数 inet_aton 源代码
- linux 内核中ip字符串与整数相互转换 手动实现inet_aton 与inet_ntoa 的功能
- 基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析
- TCP/IP驱动十一 ——内核2.6.26中inet_csk和inet_sk两个函数推导
- [MySQL]IP处理函数inet_aton()和inet_ntoa()
- IP处理函数inet_aton()和inet_ntoa(),inet_pton,inet_ntop
- IP处理函数inet_aton()和inet_ntoa()
- Mysql的IP处理函数inet_aton()和inet_ntoa()
- MySQL的IP处理函数inet_aton()和inet_ntoa()
- IP处理函数inet_aton()和inet_ntoa()
- TCP/IP源码学习(58)——inet_select_addr函数分析
- 基于Mysql的IP处理函数inet_aton()与inet_ntoa()的深入分析
- Mysql的IP处理函数inet_aton()和inet_ntoa()
- IP处理函数inet_aton()和inet_ntoa()使用说明
- TCP/IP驱动十一 ——内核2.6.26中inet_csk和inet_sk两个函数推导
- ip字符串转换成网络字节续的int型 inet_aton 源代码
- Mysql的IP处理函数inet_aton()和inet_ntoa()
- IP处理函数inet_aton()和inet_ntoa()使用说明
- [MySQL]IP处理函数inet_aton()和in…
- [MySQL]IP处理函数inet_aton()和inet_ntoa()