1、atoi()函数
#include<stdlib.h> int atoi(const char *str)
将字符串转化为整型数
int val; char str[20]; strcpy(str, "98993489"); val = atoi(str); //此时val就是整型数98993489
2、inet_addr()、inet_aton()、inet_ntoa()
#include<arpa/inet.h> int inet_aton(const char* strptr, struct in_addr* addrptr); //若字符串有效返回1,否则返回0 in_addr_t inet_addr(const char* strptr); //若字符串有效则返回32位二进制网络字节序的IPv4地址,否则返回INADDR_NONE char* inet_ntoa(struct in_addr inaddr); //返回指向一个点分十进制的数串指针 int inet_pton(int family, const char *strptr, void* addrptr); //若成功则返回1,若出入的不是有效表达格式返回0,若出错返回-1 const char* inet_ntop(int family, const void* addrptr, char* strptr, size_t len);//若成功则返回指向结果的指针,否则返回NULL
inet_aton、inet_addr、inet_pton是将点分十进制数串转换为32位二进制网络字节序的IPv4地址,inet_ntoa、inet_ntop则是将IPv4地址转换为点分十进制的数串。
INADDR_NONE为32位全1的值,所以inet_addr不能处理“255.255.255.255”这个地址,并且C编译器不同,可能此函数出错的返回值会不同(有的为-1),所以现在不建议使用此函数,而应该使用inet_aton或者支持IPv6的inet_pton函数。
inet_pton和inet_ntop支持IPv4和IPv6,在参数family中进行指定。
3、字节序转换函数
#include<netinet/in.h> uint16_t htons(uint16_t host16bitvalue); uint32_t htonl(uint32_t host32bitvalue); uint16_t ntohs(uint16_t net16bitvalue); uint32_t ntohl(uint32_t net32bitvalue);
h代表的host(主机字节序),n代表的net(网络字节序),s为short,l为long。