IP说明

IPv4:无符号32位整型数或者16字节的字符串

  1. #define INET_ADDRSTRLEN   16  

struct sockaddr_in adr_inet; /* AF_INET */

IPv6:16字节的十六进制表示或46字节的字符串

  1. #define INET6_ADDRSTRLEN 46  
struct sockaddr_in6 {
unsigned short intsin6_family;    /* AF_INET6 */
__be16 sin6_port;      /* Transport layer port # */
__be32 sin6_flowinfo;  /* IPv6 flow information */
struct in6_addrsin6_addr;      /* IPv6 address */ 
__u32 sin6_scope_id;  /* scope id (new in RFC2553) */
};

下面这两个函数通用在IPv4和IPv6的转换:

  1. #include<arpa/inet.h>  
  2. int inet_pton(int family, const char *strptr, void *addrptr);  
  3.                                     返回:若成功则为1,若输入不是有效的表达格式则为0,若出错则为-1  
  4. const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);  
  5.                                                返回:若成功则为指向结果的指针, 若出错则为NULL 

其他函数说明:

int inet_aton(const char *cp, struct in_addr *inp);//IPv4的点分十进制字符串转换为无符号的32位整型数,返回网络字节序的IP地址

char*inet_ntoa(struct in_addr in);//IPv4无符号整型数转换为点分十进制字符串

inet_addr和 inet_network会认为IP是255.255.255.255为无效的地址。

in_addr_t inet_addr(const char *cp);//IPv4的点分十进制字符串转换为无符号的32位整型数,返回网络字节序
in_addr_t inet_network(const char *cp);//IPv4的点分十进制字符串转换为无符号的32位整型数,返回主机字节序

in_addr_t inet_netof(struct in_addr in);

in_addr_t inet_lnaof(struct in_addr in);

示例:

#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{
    struct in_addr s; // IPv4地址结构体
    //int inet_pton(int af, const char *src, void *dst);
    inet_pton(AF_INET, "172.16.4.22", (void *)&s);

    printf("s.s_addr=%d\n", s.s_addr);

    char temp_ip[46] = {0};
    s.s_addr = 369365164;
    //const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
    inet_ntop(AF_INET, (void *)&s, temp_ip, 46);
    printf("temp_ip=%s\n", temp_ip);

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值