J'ai donc fait cette chose comme ceci:Comment convertir une adresse en un masque de réseau (décimal)
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);
}
}
En fait ce que je ne vous prends l'adresse (disons que c'est 4) et je crée un tableau avec 1s et 0s (fait un masque de masque de réseau). Puis j'ai converti ce tableau en 4 variables (numar1,2,3,4) que j'ai transformées en base 10 (à partir de 2). Donc, si mon adresse est 4, la sortie sera 240.0.0.0, exactement comme ici: https://www.iplocation.net/subnet-mask Le problème est que ce code est un vrai désordre et très inefficace. Comment puis-je transformer efficacement cette adresse en un masque de réseau (décimal)? Puis-je travailler d'une manière ou d'une autre avec les bits? Quelque chose comme, prendre les 8 premiers bits, les convertir en base 10, prendre les 8 bits suivants les convertir, prendre la prochaine ... etc? Ou je ne sais pas, quelque chose qui est pas ... mauvais
Je suis un noob, je sais que c'est un gâchis
A part: je n'ai pas de réponse mais prenez l'habitude de placer le 'newline' à la * fin * de chaque expression' printf', pas au début. Ce que vous avez n'est pas idiomatique et vous induira en erreur lors de l'impression de repères de débogage. –
quelque chose comme 'htonl()' ou 'htons()' serait-il utile? – KevinDTimm
Vos boucles semblent ne pas savoir que les tableaux dans C sont indexés entre '0' et' LEN-1' bien que vous ne nous ayez pas donné les définitions de tableau. –