2. 計算IP 相關位址

namespace Q2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        { // 10.168.137.88/26
            var ip = textBox1.Text;
            var bits = int.Parse(ip[(ip.IndexOf("/") + 1)..]);
            ip = ip[0..ip.IndexOf("/")];

            var binary = (string.Join("", ip.Split(".").Select(int.Parse).Select(r => Convert.ToString(r, 2).PadLeft(8, '0'))));

            //MessageBox.Show(binary);
            //var num = Convert.ToInt64(binary, 2);
            //num >>= 32 - bits;
            //num <<= 32 - bits;
            //MessageBox.Show(Convert.ToString(num,2)+"");

            var addr = binary[0..bits];
            while (addr.Length < 32) addr += "0";


            textBox2.Text = tip(addr);
            textBox3.Text = tip(string.Join("", Convert.ToString((int)Math.Pow(2, 32-bits) - 1, 2).PadLeft(32, '0')
                            .Select((e, i) =>(char)( ((e - '0') | (addr[i] - '0')) + '0'))));
            textBox4.Text = (Math.Pow(2, (32 - bits)) - 2).ToString();
        }

        string tip(string addr)
        {
            return string.Join(".",
                                       addr.Chunk(8).Select(r => Convert.ToInt16(string.Join("", r), 2)));
        }
    
    }

}

Last updated