运维开发网

UNIX常用的IP表示掩码方式转换为字符串的程序实现方法

运维开发网 https://www.qedev.com 2020-02-27 14:49 出处:51CTO 作者:vin_do
一种IP的表示方式为192.168.1.1/24,其数字24的含义为24位掩码,即掩码为255.255.255.0,程序中读入的类似192.168.1.1/24的字符串可能需要转换为IP地址和掩码两个字符串保存或处理,即将192.168.1.1/24转换为192.168.1.1和255.255.255.0,一种程序的实现方法如下 <pre lang="C"> #

一种IP的表示方式为192.168.1.1/24,其数字24的含义为24位掩码,即掩码为255.255.255.0,程序中读入的类似192.168.1.1/24的字符串可能需要转换为IP地址和掩码两个字符串保存或处理,即将192.168.1.1/24转换为192.168.1.1和255.255.255.0,一种程序的实现方法如下

<pre lang="C">

#include <stdio.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <string.h>

int main()

{

 char ip[] = "192.168.1.1/24";

 uint8_t *ipPrint = NULL;

 uint32_t ipAddr;

 uint32_t *ipPtr = &ipAddr;

 uint32_t mask = 0;

 uint32_t value = 0;

 uint32_t i = 0, j = 0;

 uint8_t *ptr = NULL;

 struct in_addr in;

 ptr = strtok(ip, "/");

 inet_aton(ptr, (struct in_addr *)ipPtr);

 ptr = strtok(NULL, "/");

 value = atoi(ptr);

 for(i = 0; i<value; i++)

 {

  j = value-i-1;

  mask |= 1<<j;

 }

 printf("%.8x\n%.8x\n",ipAddr,mask);

 in.s_addr = ipAddr;

 ipPrint = inet_ntoa(in);

 printf("%s\n",ipPrint);

 in.s_addr = mask;

 ipPrint = inet_ntoa(in);

 printf("%s\n",ipPrint);

 return 0;

}

</pre>

0

精彩评论

暂无评论...
验证码 换一张
取 消