c语言中IP地址的类型转换

Python023

c语言中IP地址的类型转换,第1张

你要知道你平常用的ip地址存入计算机并不是点分形式的,是uint32类型的,当你需要取得这个点分形式的ip地址,你需要调用inte_ntoa,他的参数是in_addr,你要知道in_addr不是一个基本类型,它是一个结构体,里面有个成员,你把他的值设成那个uint32类型的ip,再调用inet_ntoa,算的结果就是点分形式的ip了

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

//从字串p中获取ip整数到整数数组a,成功返回0,失败返回1

int getipaddress(char *pp, int *a){

int d[5]={-1},di=1,ai=0

int i,j,m

char *p

p=(char *)malloc(sizeof(char)*strlen(pp))

strcpy(p,pp)    //把来源的pp地址复制下来,要不然pp的内容可能是常数,将无法修改 

//删除p中非数字,非小数点的字符

for(i=strlen(p)-1i>=0i--)

if(p[i]!='.' && (p[i]<'0' || p[i]>'9'))

for(j=ij<strlen(p)j++)

 p[j]=p[j+1]

//检查获取小数点所在的位置

if (p[0]=='.') return 1     //小数点在第一位,错误 

for(i=0i<strlen(p)i++)

if(p[i]=='.') {

d[di++]=i

if (di>4) return 1   //小数点数量超过3个,错误 

}

if (di!=4) return 1   //小数点数量少于3个,错误 

d[4]=strlen(p)

//计算各ip的分段值

for(i=0i<4i++){

m=0

for(j=d[i]+1j<=d[i+1]-1j++)

m=m*10+p[j]-'0'

if (m<0 || m>255) return 1 //整数的数值过大 

a[i]=m

}

free(p)

return 0

int main(){

int address[4]

char *p="192.168.0.1"

int i,k

k=getipaddress(p,address)

if (k==0)

for(i=0i<4i++)

printf("%d ",address[i])

else

printf("错误的ip地址\n") 

}