二进制字符串为int,然后是BitWise AND

时间:2017-03-08 10:10:43

标签: c# bitwise-and

我正在尝试创建一个小程序,我可以输入IPv4地址和SubMask地址。

工作得很好......

然后我会创建一个AND,所以我可以看到IPv4地址来自的SubNetwork,(二进制形式)...... 我无法让它发挥作用,有人可以帮助..

这里我试图将按位字符串转换为Int,所以我可以和AND,但我的变量iSIDs和iSIDr(int数据类型)不会得到一个值..

变量带子结果和结果是32位二进制形式的十进制IPv4转换器地址,所以BitWise字符串......

        string SIDsubresult = subresult;
        SIDsubresult = SIDsubresult.Replace(".", "");
        string SIDresult = result;
        SIDresult = SIDresult.Replace(".", "");
        int iSIDs = Convert.ToInt32(SIDsubresult);
        int iSIDr = Convert.ToInt32(SIDresult);
        Console.Write(iSIDr & iSIDs);

EDIT / UPDATE

所以在我开始编写代码之前都有代码。 之前我的代码和代码在这里

        var split = (from p in ipv4add.Split('.') select int.Parse(p)).ToArray();
        string result = string.Format("{0}.{1}.{2}.{3}",
            Convert.ToString(split[0], 2).PadLeft(8, '0'),
            Convert.ToString(split[1], 2).PadLeft(8, '0'),
            Convert.ToString(split[2], 2).PadLeft(8, '0'),
            Convert.ToString(split[3], 2).PadLeft(8, '0'));

        var subsplit = (from s in subnetmaske.Split('.') select int.Parse(s)).ToArray();
        string subresult = string.Format("{0}.{1}.{2}.{3}",
            Convert.ToString(subsplit[0], 2).PadLeft(8, '0'),
            Convert.ToString(subsplit[1], 2).PadLeft(8, '0'),
            Convert.ToString(subsplit[2], 2).PadLeft(8, '0'),
            Convert.ToString(subsplit[3], 2).PadLeft(8, '0'));

        string SIDsubresult = subresult;
        SIDsubresult = SIDsubresult.Replace(".", "");
        string SIDresult = result;
        SIDresult = SIDresult.Replace(".", "");
        int iSIDs = Convert.ToInt32(SIDsubresult);
        int iSIDr = Convert.ToInt32(SIDresult);
        Console.Write(iSIDr & iSIDs);

2 个答案:

答案 0 :(得分:0)

因为int max有9个数字长度而你的ip add更长 尝试使用long:

setStyle

答案 1 :(得分:0)

我试过这个并为我工作:

 var sidsub = SIDsubresult.Split('.');
        var sid = SIDresult.Split('.');

        var result = "";
        for (int i = 0; i < sidsub.Length; i++)
        {
            result += (int.Parse(sidsub[i]) & int.Parse(sid[i]));
            if (i + 1 != sidsub.Length) result += ".";
        }