求一个将十进制IP转换成二进制的C语言算法

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:25:15
求一个算法,用C语言实现,将点分十进制IP转换成二进制,比如将 255.255.255.0转换成二进制是 11111111 11111111 11111111 00000000,那位高手能写出一个通用的算法啊,小弟拜谢.
3楼,4楼的程序我试了下,都有数据丢失,只将255.255.255.0的后两段255.0转换了,但是前面两段255.255就丢失了,我将unsign ip改成unsign long int ip也不行

#include <stdio.h>
#include <string.h>

main()
{
unsigned long i1,i2,i3,i4; //这个要改成long
unsigned long ip; //同上
int i;
char ip_str[20]={0},bin_str[33]={0};
scanf("%s",ip_str);
sscanf(ip_str,"%d.%d.%d.%d",&i1,&i2,&i3,&i4);
ip=(i1<<24)+(i2<<16)+(i3<<8)+i4;//实在不行,这里可以在每个移位前强制转换成long型
for(i=31;i>=0;i--)sprintf(bin_str,"%s%d",bin_str,(ip&(1<<i))>>i);
printf(" IP(dec):%s \n IP(hex):%X \n IP(bin):%s\n",ip_str,ip,bin_str);

}

完善后程序(楼上修改得):

#include <stdio.h>
#include <string.h>

int main()
{
int i1, i2, i3, i4;
unsigned ip;
int i;
char ip_str[20] = {0}, bin_str[33] = {0};
printf("please input your IP:");
scanf("%s", ip_str);
sscanf(ip_str, "%d.%d.%d.%d", &i1, &i2, &i3, &i4);