#include <stdlib.h>
#include <string.h>
参数:
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)