С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
TobyShow
1 / 1 / 0
Регистрация: 09.11.2012
Сообщений: 101
1

Переделать код попроще

28.03.2013, 23:09. Просмотров 380. Ответов 0
Метки нет (Все метки)

Здравствуйте помогите пожалуйста код переделать чтобы попроще было.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
 
        private bool validateIpMaskString(String stringValue) // тру фолс  стринг передаю
        {
            string[] ipMaskParts = stringValue.Split('/'); // на куски по /
            if (ipMaskParts.Length != 2) //не равна 2 длина. если черточек больше
                return false;
            int afterSlashInt;
            if (!int.TryParse(ipMaskParts[1], out afterSlashInt) && afterSlashInt < 0 && afterSlashInt > 32) // проверяем если маска сонвертится в Int  и она в диапазоне от 0 до 255, то идём дальше
                return false;
            string[] ipParts = ipMaskParts[0].Split('.'); // первый элемент разбиваем по точкам
            if (ipParts.Length != 4) //если длина не равна 4 то фолс
                return false;
            foreach (String partString in ipParts)
            {
                int partInt;
                if (!int.TryParse(partString, out partInt) && partInt < 0 && partInt > 255) // проверка чтобы не превышало
                    return false;
            }
            return true; // все тру если не сработал фолс
        }
 
        private UInt32 ipFromStringToInt(String stringValue) // получили строку IP, в цикле проходим каждый октет айпишника, с помощью  сдвига влево(<<) и поразрядного или(|) формируем из них одно интовое число
        {
            UInt32 intValue = 0;               
            foreach (String stringPart in stringValue.Split('.')) 
            {
                intValue <<= 8; 
                intValue |= UInt32.Parse(stringPart); 
            }
            return intValue;
        }
 
        private String ipFromIntToString(UInt32 intValue) // метод обратный предыдущему, с помощью сдвига и поразрядного и(&) каждый октет приводим к string и возвращаем всю строку ip
        {
            return ((intValue >> 24) & 255).ToString() + "." + ((intValue >> 16) & 255).ToString() + "." + ((intValue >> 8) & 255).ToString() + "." + (intValue & 255).ToString(); 
        }
 
 
        private void button1_Click_1(object sender, EventArgs e)
        {
            if (validateIpMaskString(textBox1.Text)) // если введённые данные были корректны,то
            {
                UInt32 ipAddressInt = ipFromStringToInt(textBox1.Text.Split('/')[0]); // получили ip
                UInt32 subnetMask = UInt32.MaxValue << (32 - int.Parse(textBox1.Text.Split('/')[1]));// получили маску
                UInt32 subnetNumber = ipAddressInt & subnetMask;// получили номер подсети (& - поразрядное и)
                UInt32 broadcastAddress = subnetNumber | ~subnetMask; // получили широковещательный адрес (| - поразрядное или, ~  - инвертор)
                label1.Text = ipFromIntToString(subnetMask); // законвертили в строку и отправили на форму
                label2.Text = ipFromIntToString(subnetNumber);
                label3.Text = ipFromIntToString(broadcastAddress);
            }
            else
                MessageBox.Show("Введена строка не верного формата");
        }
    }
}

Лабораторная работа N1

Напишите программу, которая будет по заданному IP адресу и длине маски подсети вычислять маску подсети, номер подсети и широковещательный адрес для этой подсети. Предусмотреть разделения числа по точкам, запятым, слэшу и бэк-слэшу. Выполнить проверку вводимых чисел.

Пример:

Входные данные: 172.16.33.54/20
Результат:
Маска подсети: 255.255.240.0
Номер подсети: 172.16.32.0
Широковещательный адрес: 172.16.47.255
Для получения маски подсети необходимо создать 32-битное число у которого старшие биты установлены в 1, а младшие равны нулю. Количество битов равных единице равно длине маски подсети. В вышеуказанном примере маска подсети в двоичном виде:

11111111 11111111 11110000 00000000
Для получения такого числа можно использовать операцию сдвига. Создайте 32-битное число у которого все биты равны 1, а затем сдвиньте это число влево на число битов, которые должны быть равны нулю.
Для вычисления номера подсети нужно наложить на адрес маску подсети с помощью операции побитового И. Рассмотрим адрес из примера:

Адрес: 10101100 00010000 00100001 00110110
Маска: 11111111 11111111 11110000 00000000
-----------------------------------
Подсеть: 10101100 00010000 00100000 00000000
Для выполнения операции используйте операцию побитового И между двумя целыми переменными. В C это операция &, а в Delphi AND.
Наконец, для получения широковещательного адреса нужно установить в 1 все биты в номере хоста (это те биты, которые в маске подсети равны нулю). Инвертируйте маску и добавьте её к номеру подсети. Для выполнения операции используйте операцию побитового Или между двумя целыми переменными:

Подсеть: 10101100 00010000 00100000 00000000
НЕ маска: 00000000 00000000 00001111 11111111
-----------------------------------
10101100 00010000 00101111 11111111
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2013, 23:09
Ответы с готовыми решениями:

Переделать код
Здравствуйте, код работает в консоле, можете его переделать чтобы работал в...

Переделать код
Здравствуйте, помогите переделать код, так, чтобы закомментированного не было,...

Переделать код, поворачивающий изображение
По заданию было дано написать поворот изображения. В классе выше (здесь не...

Переделать код для компилятора C++ на языке C#
Всем привет форумчане! Я долго решал как сделать чтоб из TextBox1 текст...

Переделать код TCPclient'a под формы
Добрый вечер! попыталась переделать код TCPclient'a под формы. Не получается,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2013, 23:09

Как переделать VBA код под C#?
Программа выполнялась на VBA Exсel нужно сделать тоже самое, но на C#. Я в С#...

Код написанный в VBA переделать на язык C#
Добрый день, имеется фрагмент из записанного макроса в Excel. Мне его надо бы...

Как попроще убить мигающий курсор в RichTextBox?
(тот, что показывает текущую позицию в тексте, а не курсор мыши). Если объявить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru