在IPAddress上执行按位操作

时间:2013-02-14 20:50:11

标签: vb.net ip-address bitwise-operators

当我发现我不能简单地这样做时,我真的很惊讶:

    Dim ip = IPAddress.Parse("192.168.1.3")
    Dim mask = IPAddress.Parse("255.255.255.0")

    ' next lines won't compile
    Dim networkAddress = ip And mask ' would produce 192.168.1.0
    Dim broadcastAddress = ip Or (Not mask) ' would produce 192.168.1.255

所以在我开始在子类上实现这种类型的功能之前:我错过了一些明显的东西吗?有没有理由为什么这个没有实现,我忽略了?

我承认,在我的网络课程中,我可能没有像我应该那样多关注。

修改

我想出了这段代码:

    Dim ip = IPAddress.Parse("192.168.1.3")
    Dim mask = IPAddress.Parse("255.255.255.0")

    Dim ipUnsignedInteger = BitConverter.ToUInt32(ip.GetAddressBytes, 0)
    Dim maskUnsignedInteger = BitConverter.ToUInt32(mask.GetAddressBytes, 0)

    Dim networkAddressUnsignedInteger = ipUnsignedInteger And maskUnsignedInteger
    Dim networkAddress = New IPAddress(networkAddressUnsignedInteger)

    Dim broadcastAddressUnsignedInteger = ipUnsignedInteger Or (Not maskUnsignedInteger)
    Dim broadcastAddress = New IPAddress(broadcastAddressUnsignedInteger)

它可以工作,但对于我来说显而易见的东西,这是一个令人难以置信的额外代码!为什么这不是框架的一部分?!

1 个答案:

答案 0 :(得分:0)

Dim networkaddress2 As New IPAddress(ip.Address And mask.Address)
Dim broadcastAddress2 = New IPAddress(CUInt(ip.Address) Or (Not CUInt(mask.Address)))

请注意,不推荐使用IPAddress.Address。