C#添加直到没有<value> left -For-loop </value>

时间:2012-03-21 20:53:16

标签: c# for-loop ip-address

5在网络计算器上,我输入了用户输入的IP和子网以及输入的所述主机IP的网络地址。 (已计算)

我现在需要的是制作一个向上计数的for循环,直到达到最后一个ip地址(广播)。

因此;

int IP1 = 192,IP2 = 168,IP3 = 0,IP4 = 0, subnet = 255.255.0.0;// 192.168.0.0/16
int totalIPs = 65536; //hostbits^2

do
        {
            for (int a = IP1; a < 255; a++)
            {
                IP1++;
                for (int b = IP2; b < 255; b++)
                {
                    IP2++;
                    for (int c = IP3; c < 255; c++)
                    {
                        IP3++;
                        for (int d = IP4; d < 255; d++)
                        {
                            totalIPs= totalIPs - 1;
                            IP4++;
                        }
                        IP4 = 0;
                    }
                    IP3 = 0;
                }
                IP2 = 0;
            }
        }
        while (totalIPs > 0);

我知道这个for循环有一些非常严重的错误,但我似乎无法得到它。

我需要的是广播地址,从原始IP值(在这种情况下为192.168.0.0)计数并从那里计数到最后一个IP(现在我们知道它需要计算多少IP)

因此,当八位位组4(d)变为255时,则八位位组3(c)变为1,然后重置八位位组4(d),依此类推,就像时钟一样。

3 个答案:

答案 0 :(得分:1)

你真的不需要经历所有这些,你只是在这里添加数字。

首先你这样做:

int carry = 0;
IP4 += totalIPs;

carry = IP4 / 254;
IP4 = IP4 % 254;

if(carry>0) // Need to spill over IP3
{
   IP3 += carry;

   carry = IP3 / 254;
   IP3 = IP3 % 254;

   if(carry > 0)  // Spill over to IP2
   {
       IP2 += carry;

       carry = IP2 / 254;
       IP2 = IP2 % 254;

       IP1 += carry;
       IP1 %= 254;    // No spill-over here
   }
}

这有点麻烦,因为你选择使用4个int作为IP部件,但是它将完成工作而没有循环。

答案 1 :(得分:0)

这样做你想要的吗?

int IP1 = 192, IP2 = 168, IP3 = 0, IP4 = 0;

for (int i1 = IP1; i1 < 256; i1++) {
    for (int i2 = IP2; i2 < 256; i2++) {
        for (int i3 = IP3; i3 < 256; i3++) {
            for (int i4 = IP4; i4 < 256; i4++) {
                string ip = String.Format("{0}.{1}.{2}.{3}", i1 i2, i3, i4);
                ...
            }
            IP4 = 0;
        }
        IP3 = 0;
    }
    IP2 = 0;
}

答案 2 :(得分:0)

或者您可以依靠.NET Framework:

byte IP1 = 192, IP2 = 168, IP3 = 0, IP4 = 0;
int totalIPs = 65536;

int littleEndian = IP4 + (IP3 << 8) + (IP2 << 16) + (IP1 << 24) + totalIPs;
var bigEndian = BitConverter.GetBytes(littleEndian).Reverse().ToArray();
Console.WriteLine(new System.Net.IPAddress(bigEndian));