所以,我做這件事情是這樣的:如何地址轉換成網絡掩碼(十進制)
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),我創建了1秒的數組和0s(使其成爲網絡掩碼二進制)。然後我將該數組轉換成4個變量(numar1,2,3,4),我將其轉換爲10(從2開始)。 所以,如果我的地址是4,輸出將是240.0.0.0,就像這裏:https://www.iplocation.net/subnet-mask 問題是這個代碼是一個真正的混亂和非常無益。 如何有效地將該地址轉換爲網絡掩碼(十進制)?我能以某種方式處理這些碎片嗎?就像,拿到前8位,將它們轉換爲10位,接下來8位轉換它們,拿下...等等? 還是我不知道,這東西是不是...壞
我是小白,我知道這是一個爛攤子
除此之外:我沒有答案,但請習慣於將'newline'放置在每個'printf'表達式的* end *處,而不是開頭。你有什麼不是慣用的,在打印調試線索時會誤導你。 –
會像'htonl()'或'htons()'對你有幫助嗎? – KevinDTimm
你的循環似乎並不知道C中的數組在'0'和'LEN-1'之間被索引,儘管你沒有使用數組定義。 –