在windows下用C语言怎样从文档中读取IP地址并将其转换成unsiged long型的

在windows下用C语言怎样从文档中读取IP地址并将其转换成unsiged long型的,第1张

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

/*字符串形式 IP 转换为一个整数

参数:

strIP 字符串形式的IP

intIP 转换成功后的整数

返回:

如果转换失败,返回0;否则返回1

*/

int strToInt(char strIP[],unsigned long *intIP)

{

int length = strlen(strIP)

int i=0,k=3,part=0

*intIP=0

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

{

if(strIP[i]=='.' || strIP[i]=='\0')

(*intIP) |= (part<<(k--*8)) , part=0

else if(strIP[i]>='0' &&strIP[i]<='9')

part=part*10+(strIP[i]-'0')

else

return 0

}

return 1

}

/*字符串形式 IP 转换为一个整数

参数:

intIP 整数形式的 IP

strIP 转换字符串形式的IP

返回:

如果转换失败,返回0;否则返回1

*/

int intToStr(unsigned long intIP,char strIP[])

{

int buf[4],i

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

{

buf[i]=intIP%256

intIP/=256

}

if(intIP !=0)

return 0

else

{

sprintf(strIP,"%d.%d.%d.%d",buf[3],buf[2],buf[1],buf[0])

return 1

}

}

int main(int argc, char *argv[])

{

char strIP[16]

unsigned long intIP

// ip 保存在 ips.txt 文件中,这里用了输入重定向,以方便输入。

if(freopen("ips.txt","r",stdin)!=NULL)

{

// 循环读取字符串知道文件末尾

while(scanf("%s",strIP) !=EOF)

{

// 字从符串IP整数IP

if(strToInt(strIP,&intIP))

{

printf("字符串IP转换为一个整数:%s(字符串) = %lu(十进制) = %lX(十六进制)\n",strIP,intIP,intIP)

// 进行反向转换,从整数IP,转换为字符串IP,以验证转换的正确性

intToStr(intIP,strIP)

printf("一个整数转换为字符串IP:%lu(十进制) = %lX(十六进制) = %s(字符串)\n\n",intIP,intIP,strIP)

}

else

{

printf("%s 不是一个合法的IP!\n\n",strIP)

}

}

}

else

{

printf("无法打开ip文件!\n")

}

scanf("%d",&intIP)

system("pause")

return 0

}

/*

字符串IP转换为一个整数:202.112.1.1(字符串) = 3396337921(十进制) = CA700101(十

六进制)

一个整数转换为字符串IP:3396337921(十进制) = CA700101(十六进制) = 202.112.1.1(

字符串)

/ 不是一个合法的IP!

字符串IP转换为一个整数:255.255.255.0(字符串) = 4294967040(十进制) = FFFFFF00(

十六进制)

一个整数转换为字符串IP:4294967040(十进制) = FFFFFF00(十六进制) = 255.255.255.0

(字符串)

字符串IP转换为一个整数:202.112.1.2(字符串) = 3396337922(十进制) = CA700102(十

六进制)

一个整数转换为字符串IP:3396337922(十进制) = CA700102(十六进制) = 202.112.1.2(

字符串)

/ 不是一个合法的IP!

字符串IP转换为一个整数:255.255.255.0(字符串) = 4294967040(十进制) = FFFFFF00(

十六进制)

一个整数转换为字符串IP:4294967040(十进制) = FFFFFF00(十六进制) = 255.255.255.0

(字符串)

字符串IP转换为一个整数:202.112.2.1(字符串) = 3396338177(十进制) = CA700201(十

六进制)

一个整数转换为字符串IP:3396338177(十进制) = CA700201(十六进制) = 202.112.2.1(

字符串)

/ 不是一个合法的IP!

字符串IP转换为一个整数:255.255.255.0(字符串) = 4294967040(十进制) = FFFFFF00(

十六进制)

一个整数转换为字符串IP:4294967040(十进制) = FFFFFF00(十六进制) = 255.255.255.0

(字符串)

*/

#include <stdio.h>

int main(){

FILE *pf

char s1[20], s2[20], s3[100], *p

pf=fopen("c:\\ip.txt","r")

if(!pf){

printf("Error!\n")

return 1

}

fscanf(pf,"%s %s",s1,s2)

p=fgets(s3,99,pf)

while(p!=0){

printf("%s\t%s\t%s",s1,s2,s3)

fscanf(pf,"%s %s",s1,s2)

p=fgets(s3,99,pf)

}

fclose(pf)

return 0

}

可以写成命令行参数的模式的,不用修改代码,形如:

./server 192.168.1.112 10088

./client 192.168.1.112 10088


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12028105.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存