Так что я сделал это так:Как преобразовать адреса в NETMASK (десятичное)
for(i=1;i<=MASK;i++) // MASK IS THE ADDRESS
{
MASKBINARY[i]=1; // CREATE AN ARRAY WITH 1s and 0s
}
for(i=8;i>0;i--)
{
if(MASKBINARY[i-1]==1 && MASKBINARY[i]==0) // check if the next element is 1
{
k=i-1; // get the position to the first 1
numar1=numar1 + powl(10,i-1);
}
if(MASKBINARY[i]==1 && i!=(8-k)) // check if your element is 1 and different from the first 1
{
numar1=numar1 + powl(10,8-i);
}
}
printf("\n %d",numar1);
for(i=16;i>8;i--)
{
if(MASKBINARY[i-1]==1 && MASKBINARY[i]==0 && numar1!=11111111)
{
k=i-9;
numar2=numar2 + powl(10,17-i);
}
if(MASKBINARY[i]==1 && i!=k+8)
{
numar2=numar2 + powl(10,16-i);
}
}
printf("\n %d",numar2);
for(i=24;i>16;i--)
{
if(MASKBINARY[i-1]==1 && MASKBINARY[i]==0 && numar2!=11111111)
{
k=i-17;
numar3=numar3 + powl(10,25-i);
}
if(MASKBINARY[i]==1 && i!=k+16)
{
numar3=numar3 + powl(10,24-i);
}
}
printf("\n %d",numar3);
for(i=32;i>24;i--)
{
if(MASKBINARY[i-1]==1 && MASKBINARY[i]==0 && numar3!=11111111)
{
k=i-25;
numar4=numar4 + powl(10,33-i);
}
if(MASKBINARY[i]==1 && i!=k+24)
{
numar4=numar4 + powl(10,32-i);
}
}
В основном то, что я вам взять адрес (скажем, это 4), и я создал массив с 1s и 0s (сделало его бинарной сетью). Затем я преобразовал этот массив в 4 переменные (numar1,2,3,4), которые я преобразовал в базу 10 (из 2). Так что, если мой адрес равен 4, выход будет 240.0.0.0, точно так же, как здесь: https://www.iplocation.net/subnet-mask Проблема в том, что этот код является настоящим беспорядком и ОЧЕНЬ незаменимым. Как я могу преобразовать этот адрес в сетевую маску (десятичную) эффективно? Могу ли я как-то работать с битами? Что-то вроде, возьмите первые 8 бит, преобразуйте их в базу 10, возьмите следующие 8 бит, преобразуйте их, возьмите следующий ... и т. Д.? Или я не знаю, что-то, что это не то, что ... плохо
Я нуб, я знаю, что это беспорядок
Кроме того: у меня нет ответа, но, пожалуйста, привыкните размещать 'newline' в конце * каждого выражения' printf', а не в начале. То, что у вас есть, не является идиоматичным и вводит вас в заблуждение при печати отладочных сигналов. –
что-то вроде 'htonl()' или 'htons()' будет вам полезной? – KevinDTimm
Ваши петли, похоже, не знают, что массивы в C индексируются между '0' и' LEN-1', хотя вы не украсили нас определениями массива. –