先看看最终的效果:
以下是代码部分的展示,写了详细的说明;
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() 函数来规避这个问题;