擅长:python、mysql、java
<p>我想我会提出我自己的解决方案,因为我希望它比其他答案更容易阅读。</p>
<pre><code>def cidr_to_netmask(cidr):
cidr = int(cidr)
mask = (0xffffffff >> (32 - cidr)) << (32 - cidr)
return (str( (0xff000000 & mask) >> 24) + '.' +
str( (0x00ff0000 & mask) >> 16) + '.' +
str( (0x0000ff00 & mask) >> 8) + '.' +
str( (0x000000ff & mask)))
</code></pre>
<p>现在更容易看到发生了什么,那就是:</p>
<ol>
<li>通过用<code>1</code>s填充前面并让<code>cidr</code>组成其余部分来获取数字<code>mask</code></li>
<li>对于每个位,应用<code>mask</code></li>
<li>将所有位连接在一起,用句点分隔</li>
</ol>
<p>这是非常程序化的,不使用任何库。</p>