for (c = 8; c >= 0; c--){
k = ip4 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
Привет всем. Я пытаюсь преобразовать IP-адрес из base10 или base 16 в двоичный файл. Я написал этот код для преобразования IP-адреса в двоичный файл. Но также мне нужно сохранить выходные данные цикла for, чтобы ответить на такой запрос. вопрос и продолжить код.
Вопрос по ссылке. Запрещено использование массивов и структур данных. Вот мое задание, которое я пытаюсь решить. Я буду очень рад, если вы решите мою проблему.
Чем вам за помощь. Вот мой код от начала до цикла.
Я добавил свой код с самого начала, чтобы вы могли видеть, что такое (ip4). Например, программа спросит пользователя (введите IP-адрес :), а пользователь введет такой IP-адрес (168.122.1.2) в этом IP-адресе (168 равно в ip1) (122 равно ip2) (1 равно ip 3) (2 equan ip4). Итак, у меня есть 4 цикла for для преобразования его в двоичный файл в каждом блоке. Я сохраняю, например (00000001) для ip4. Мне нужно сохранить как целое число.
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main (){
char ch;
int base,ip1,ip2,ip3,ip4,ip;
int sub1,sub2,sub3,sub4,subnet;
printf("Please enter the Base for your IP Address (10/16):");
scanf("%d",&base);
if(base!=10 && base!=16)
printf("Sorry that is not a valid base!\n");
if(base==10){
printf("Please enter the IP Address:");
scanf("%d%c%d%c%d%c%d",&ip1,&ch,&ip2,&ch,&ip3,&ch,&ip4);
ip=ip1+ip2+ip3+ip4;
if(ip>0&&ip<1020)
printf("Thanks it is a valid IP address!\n");
else
printf("This is NOT a valid IP Address!");
printf("Please enter the Subnet Mask: ");
scanf("%d%c%d%c%d%c%d",&sub1,&ch,&sub2,&ch,&sub3,&ch,&sub4);
subnet=sub1+sub2+sub3+sub4;
if(subnet>0&&subnet<1020)
printf("Thanks it is a valid Subnet Mask!\n");}
else if(base==16){
printf("Please enter the IP Address:");
scanf("%d%c%d%c%d%c",&ip1,&ch,&ip2,&ch,&ip3,&ch,&ip4);
ip=ip1+ip2+ip3+ip4;
if(ip>0&&ip<1020)
printf("Thanks it is a valid IP address!\n");
else
printf("This is NOT a valid IP Address!");
printf("Please enter the Subnet Mask: ");
scanf("%d%c%d%c%d%c%d",&sub1,&ch,&sub2,&ch,&sub3,&ch,&sub4);
subnet=sub1+sub2+sub3+sub4;
if(subnet>0&&subnet<1020)
printf("Thanks it is a valid Subnet Mask!\n");}
int menu,k,c;
while(1){
printf("1. Convert IP address to binary\n");
printf("2. Convert subnet mask to binary\n");
printf("3. Specify the class of the IP address\n");
printf("4. Specify the number of host addresses availablen\n");
printf("5. Provide new IP Address and subnet mask\n");
printf("6. Exit\n");
scanf("%d",&menu);
while(menu>0 && menu<6){
if(menu==1){
for (c = 8; c >= 0; c--)
{
k = ip1 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf(".");
for (c = 8; c >= 0; c--)
{
k = ip2 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf(".");
for (c = 8; c >= 0; c--)
{
k = ip3 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf(".");
for (c = 8; c >= 0; c--)
{
k = ip4 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf("\n");
break;
}
else if (menu==2){
for (c = 8; c >= 0; c--)
{
k = sub1 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf(".");
for (c = 8; c >= 0; c--)
{
k = sub2 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf(".");
for (c = 8; c >= 0; c--)
{
k = sub3 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf(".");
for (c = 8; c >= 0; c--)
{
k = sub4 >> c;
if (k & 1)
printf("1");
else
printf("0");
}
printf("\n");
break;
}
}
}
return 0;
}
Вы можете протестировать код. Но вы должны ввести основание 10, и ip будет просто включать точку и целое число муравья, точно так же, как 192.168.1.1, и подсеть должна быть такой.