其实就是 点分十进制的转化, 32位ip地址 , 每8位转换成一个十进制的数字(0-255之间), 所以遍历字符串ip_binary,每八位转化一次。
每次读进来的数都是从最高位开始的,权值从2^7到 2^0递减,数就直接读进来(注意:读进来的是字符,要转成数字)。
#include <stdio.h>
#include <math.h>
int main(int argc, const char* argv[])
{
char ip_binary[32];
int ip_decimal[4] = {0};
int i, j, cnt = 0;
gets(ip_binary);
/* 每八位转化成一个是十进制数 */
for(i = 0; i < 32; i += 8)
{
/* 8个数字,最高位2^7, 最低位2^0*/
int power = 7;
for(j = i; j < i + 8; j++)
{
ip_decimal[cnt] += (ip_binary[j]-'0') * pow(2, power);
power --;
}
cnt ++;
}
for(i = 0; i < 4; i++)
{
printf("%d", ip_decimal[i]);
if(i < 3)
printf(".");
}
return 0;
}