目录
计算机和网络中的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,每个“:”前后都是4位16进制的数字,共分隔成8组。
ipv6有8组,每组16个字节。
共有 2^(16x8) = 2的128次方个