题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
http://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
使用位操作解此题更加直观方便!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void ip2decimal(char ipstr[]){
unsigned int n = 0;
unsigned int seg;
char *p;
for (p = strtok(ipstr, "."); p != NULL; p = strtok(NULL, ".")){
seg = atoi(p);
n = (n << 8) | seg;
}
printf("%u\n", n);
}
void decimal2ip(char dstr[]){
int i;
unsigned int n = atoi(dstr);
unsigned int mask = 0xff;
//printf("%u", n);
for (i = 24; i >= 0; i -= 8){
printf("%d", (n >> i) & mask);
if (i > 0)
putchar('.');
}
putchar('\n');
}
int main(){
char s[19];
while (scanf("%s", s) == 1)
if (strchr(s, '.') > 0)
ip2decimal(s);
else
decimal2ip(s);
}