计算机和网络中的ip地址

ip地址如192.168.3.103,在编程的时候,我们用的是点分十进制,属于字符串。
但在计算机和网络中该字符串ip是用整型保存并识别。

在这里插入图片描述

一个整型四个字节,一个字节存储一组的数。

int inet_pton (点分十进制字符串ip地址转整型数据)

p应该是Point,因为字符串版的ip是点分十进制
在这里插入图片描述

案例

#include<stdio.h>
#include<arpa/inet.h>

int main()
{
    char ip_str[] = "192.168.3.103";
    unsigned int ip_int = 0;
    unsigned char* ip_p = NULL;

    // 将字符串数组格式的点分十进制Ip转化为32位无符号整型数据
    inet_pton(AF_INET,ip_str,&ip_int);

    printf("ip_int = %d\n",ip_int); //(ip_int是unsigned int类型)

    ip_p = (unsigned char *)&ip_int; // (将32位无符号整型数据 转为 无符号字符串格式)
    printf("in_uint = %d,%d,%d,%d\n",*ip_p,*(ip_p+1),*(ip_p+2),*(ip_p+3));
    return 0;
}

在这里插入图片描述

inet_ntop (整型数据转点分十进制字符串格式Ip地址)

函数中的Len用来指定转为字符串时是Ipv4还是v6
在这里插入图片描述

参考视频

地址转换函数

ipv4与ipv6

ipv4

有四组,每组一个字节,一共4x8=32位
ipv4一共有 2^32 =42 9496 7296 个地址。

ipv6

IPv6是由八组,每组四位16进制数字组成,每组之间由":"来分隔。

2610:00f8:0c34:67f9:0200:83ff:fe94:4c36,每个“:”前后都是416进制的数字,共分隔成8组。

在这里插入图片描述
ipv6有8组,每组16个字节。
共有 2^(16x8) = 2的128次方个

更多推荐