Vb.net 在Visual Basic中添加32位二进制文件

Vb.net 在Visual Basic中添加32位二进制文件,vb.net,binary,ip,decimal,Vb.net,Binary,Ip,Decimal,我必须计算子网地址,这可以通过将IP地址二进制添加到子网掩码二进制来实现。我可以用这个代码把它们都转换成二进制 Public Function Dec2Bin(ByVal DeciValue As Long, Optional ByVal NoOfBits As Integer = 8) _ As String Dim i As Integer Do While DeciValue > (2 ^ NoOfBits) - 1 NoOfBits = N

我必须计算子网地址,这可以通过将IP地址二进制添加到子网掩码二进制来实现。我可以用这个代码把它们都转换成二进制

    Public Function Dec2Bin(ByVal DeciValue As Long, Optional ByVal NoOfBits As Integer = 8) _
 As String
    Dim i As Integer
    Do While DeciValue > (2 ^ NoOfBits) - 1
        NoOfBits = NoOfBits + 8
    Loop
    Dec2Bin = vbNullString
    For i = 0 To (NoOfBits - 1)
        Dec2Bin = CStr((DeciValue And 2 ^ i) / 2 ^ i) & Dec2Bin
    Next i
End Function

但是现在我如何将两个32位字符串相加以获得子网地址呢?我也有dec-to-bin函数,所以我不需要任何帮助。

因此,我怀疑
DeciValue
是32位数字表示的IP地址,
NoOfBits
是子网掩码中的位数(如8代表255.0.0,16代表255.255.0.0,24代表255.255.255.0等)

你能做的是:

Public Function Network_Address(IP as UInteger, Optional Mask as UInteger = 0)
    If Mask = 0 Then
        Mask = 8 * ((IP >> 30) + 1)
    End If
    Network_Address = IP And (4294967295 Xor ((2 ^ (32 - Mask)) - 1))
End Function
现在,您将网络地址作为其数字表示形式。我想这就是你想要的


如果未指定IP子网掩码大小,此函数还将自动检测IP子网掩码大小。

您确实不需要为此设置循环。此外,如果不想在调用者中更改原语类型,则不必将其作为
ByVal
传递。