天天看点

计算连续的IP地址问题

题目:要求计算连续的IP地址。

举例:起始IP为192.168.2.2,IP总个数为3,那么要求得的所有IP的为192.168.2.2,192.168.2.3,192.168.2.4。再举个例子,起始IP为192.168.2.253,IP总个数为5那么要求得的所有IP为192.168.2.253,192.168.2.254,192.168.2.255,192.168.3.0,192.168.3.1。

按照传统的解法可以这么做:

1

2

3

4

5

6

7

8

9

10

11

12

13

<code>static</code> <code>void</code> <code>Main(</code><code>string</code><code>[] args)</code>

<code>{</code>

<code>    </code><code>string</code> <code>ip = </code><code>"192.168.2.253"</code><code>;</code><code>//起始IP</code>

<code>    </code><code>int</code> <code>count = 5;</code><code>//要计算连续IP的个数</code>

<code>                </code> 

<code>    </code><code>var</code> <code>ipValue = BitConverter.ToUInt32(IPAddress.Parse(ip).GetAddressBytes().Reverse().ToArray(), 0);</code>

<code>    </code><code>for</code> <code>(</code><code>uint</code> <code>i = 0; i &lt; count; i++)</code>

<code>    </code><code>{</code>

<code>        </code><code>IPAddress newIp = IPAddress.Parse((ipValue + i).ToString());</code>

<code>        </code><code>Console.WriteLine(newIp);</code>

<code>    </code><code>}</code>

<code>}</code>

那如果我们用linq稍微改造一下,可以这么干:

14

15

16

<code>           </code> 

<code>    </code><code>var</code> <code>newIps = </code><code>from</code> <code>p </code><code>in</code> <code>Enumerable.Range(0, count)</code>

<code>                 </code><code>let</code> <code>newIp = ipValue + p</code>

<code>                 </code><code>select</code> <code>new</code> <code>{ IP = IPAddress.Parse(newIp.ToString()) };</code>

<code>    </code><code>foreach</code> <code>(</code><code>var</code> <code>newIp </code><code>in</code> <code>newIps)</code>

<code>        </code><code>Console.WriteLine(newIp.IP);</code>

答案:

192.168.2.253

192.168.2.254

192.168.2.255

192.168.3.0

192.168.3.1

本文转自 guwei4037  51CTO博客,原文链接:http://blog.51cto.com/csharper/1348959

继续阅读