题解 | #整数与IP地址间的转换#
整数与IP地址间的转换
https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea
#include <stdio.h>
#include <string.h>
char A1[20], A2[20], A3[20], A4[20], A5[20];
char B1[20], B2[20], B3[20], B4[20], B5[20];
unsigned long long a1, a2, a3, a4, a5,b1, b2, b3, b4, b5;
char ipc[50] ="10.3.3.193", ipcnew[50];
unsigned long long ipi = 0;
int main() {
int a, b, i;
// scanf("%s",&ipchar);
// strcpy(ipchar,"sahjk");
int num = 0, left = 0, right = 0;
scanf("%s",ipc);
scanf("%llu",&ipi);
// printf("%s\n",ipc);
// printf("%llu\n",ipi);
for (i = 0; i < 50; i++) {
if (ipc[i] == '.') {
num++;
if (num == 1) {
strncpy(A1, ipc, i);
sscanf(A1, "%d", &a1);
left = i + 1;
// printf("%s-%d\n", A1, a1);
break;
}
}
}
for (i = left; i < 50; i++) {
if (ipc[i] == '.') {
num++;
if (num == 2) {
strncpy(A2, ipc + left, i - left);
sscanf(A2, "%d", &a2);
left = i + 1;
// printf("%s-%d\n", A2, a2);
break;
}
}
}
for (i = left; i < 50; i++) {
if (ipc[i] == '.') {
num++;
if (num == 3) {
strncpy(A3, ipc + left, i - left);
sscanf(A3, "%d", &a3);
left = i + 1;
// printf("%s-%d\n", A3, a3);
break;
}
}
}
for (i = left; i < 50; i++) {
if (ipc[i] == '\0') {
// num++;
// if (num == 1) {
strncpy(A4, ipc + left, i - left);
sscanf(A4, "%d", &a4);
left = i + 1;
// printf("%s-%d\n", A4, a4);
break;
// }
}
}
printf("%llu\n", a4+a3*256+a2*256*256+a1*256*256*256);
b1=ipi/(256*256*256);
// b2=(ipi/(256*256))/(256);
b2=(ipi>>16)%256;;
b3=(ipi%(256*256))/(256);
//b4=0xff&(ipi>>24);
b4=ipi%256;
sprintf(ipcnew,"%d.%d.%d.%d",(unsigned int)(b1),(unsigned int)(b2),(unsigned int)(b3),(unsigned int)(b4));
printf("%s\n",ipcnew);
//strcat(ipcnew,)
}
查看12道真题和解析