先看看最终的效果:

C#窗体(winform)实现IP地址和其子网掩码的按位与运算并输出结果-LMLPHP

以下是代码部分的展示,写了详细的说明;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace IpAdress_AND_operation
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //分别将两个textbox的信息提取出来,存放在字符串变量str1和str2中
            string str1 = textBox1.Text;
            string str2 = textBox2.Text;
            string RESULT = "";//声明一个字符串变量用来存放最终的结果
            char[] separators = { '.' };//一个可选的参数,是一个字符数组,包含用于拆分字符串的分隔符
            //将str1和str2拆分后分别存放到字符串数组strarr1和strarr2中等待下一步处理
            string[] strarr1 = str1.Split(separators);
            string[] strarr2 = str2.Split(separators);
            int flag = 0;//这个flag用于对小数点输出次数的计数
            for (int i = 0; i < strarr1.Length; i++)
            {
                //将字符串数组中的值转化为八位二进制便于下一步的按位逻辑运算
                strarr1[i] = Convert.ToString(Convert.ToInt64(strarr1[i]) , 2).PadLeft(8, '0');
                strarr2[i] = Convert.ToString(Convert.ToInt64(strarr2[i]) , 2).PadLeft(8, '0');
                //通过八次循环对八组二进制数进行与运算
                for(int j = 0; j < 8; j++)
                {
                    int x = int.Parse(strarr1[i][j].ToString()) & int.Parse(strarr2[i][j].ToString());
                    RESULT += x;
                }
                if (flag < 3)
                {
                    RESULT += '.';
                    flag += 1;
                }
            }   
            //最后将结果输出
            textBox3.Text = RESULT.ToString();
        }
    }
}

遇到的问题和解决方法:

使用 ToInt() 函数将string转化为整型的时候有可能会转化为ASCII码的值,我在编写过程中一直会把字符0和1转化为48和49,只要用int.Parse() 函数来规避这个问题;

12-04 16:33