Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.88
Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
#1

Калькулятор IP - C++

05.10.2009, 20:21. Просмотров 4370. Ответов 30
Метки нет (Все метки)

Нужно написать программку, которая обрабатывает значения ip и маски, и выводит информацию (число сетей, узлов и т.д.). В связи с небольшим опытом программирования, не знаю как интерпретировать ip на языке, не знаю как записать и где сохранить. Какие могут быть варианты, с учетом более удобной дальнейшей работы с адресом.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2009, 20:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Калькулятор IP (C++):

Простой калькулятор и калькулятор с парсингом - C++
Ребят я совсем не давно только начал изучать сишку, решил написать простенький калькулятор который работает с 2 числами. Возник вопрос, как...

Калькулятор - C++
Доброго времени суток, Народ! Помогите плиз с задачей. Нужен исходник калькулятора, самого простого, на 4 действия. Заранее спасибо!!!

Калькулятор на С++ - C++
Сделал калькулятор, работает нормально, но программа считает только два числа за раз: >>Картинка<< , как сделать так чтоб пользователь...

Калькулятор на C++ - C++
Приветствую всех. Ребят нужна помощь, в с++ особо то не рублю, веб-разработкой занимаюсь, а дали задание. Может у кого есть подобное "чудо"...

Калькулятор - C++
Пишу калькулятор. Прошу помощи. Вот мой код #include <iostream> #include <locale.h> #include <string.h> #include <cmath> using...

Калькулятор - C++
Помогите пожалуйста сделать в этом калькуляторе скобки. #include <iostream> #include <stdlib.h> #include <string.h> #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lavan
52 / 52 / 1
Регистрация: 21.03.2009
Сообщений: 371
05.10.2009, 21:23 #2
А разбиения на логические подсети надо учитывать?
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,242
Завершенные тесты: 1
05.10.2009, 22:23 #3
Lorr, выучи класс csocet
0
minitup
1 / 1 / 0
Регистрация: 27.09.2009
Сообщений: 8
06.10.2009, 00:00 #4
Че его интерпретировать-то? http://ru.wikipedia.org/wiki/Маска_подсети

Чтобы получить адрес сети, зная IP-адрес и маску подсети, необходимо применить к ним операцию поразрядной конъюнкции (логическое И).

IP-адрес: 11000000 10101000 00000001 00000010 (192.168.1.2)
Маска подсети: 11111111 11111111 11111111 00000000 (255.255.255.0)
Адрес сети: 11000000 10101000 00000001 00000000 (192.168.1.0)
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.10.2009, 05:33 #5
Цитата Сообщение от Lorr
не знаю как записать и где сохранить
адрес занимает четыре байта, поэтому хранить можно в переменной типа unsigned long
0
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
06.10.2009, 20:58 #6
Есть еще IPv6 - там адрес занимает 16 байт.
0
Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
11.10.2009, 20:16  [ТС] #7
Цитата Сообщение от odip Посмотреть сообщение
Есть еще IPv6 - там адрес занимает 16 байт.
Ну 6-я версия IP была успешно разработана и так же успешно положена на полку.
Так что нет необходимости обеспечивать функционал для поддрежки этого стандарта
0
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
11.10.2009, 20:18 #8
6-я версия IP была успешно разработана и так же успешно положена на полку
Ничего подобного.
До сих пор допиливают
Vista/2008/Windows7 по умолчанию имеют включенный IPv6
0
Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
11.10.2009, 20:28  [ТС] #9
Цитата Сообщение от odip Посмотреть сообщение
Ничего подобного.
До сих пор допиливают
Vista/2008/Windows7 по умолчанию имеют включенный IPv6
Вот только не видно, что кто-то сильно его использует. Долго переходить будут, если вообще будут.

Добавлено через 3 минуты
Цитата Сообщение от minitup Посмотреть сообщение
Че его интерпретировать-то? http://ru.wikipedia.org/wiki/Маска_подсети

Чтобы получить адрес сети, зная IP-адрес и маску подсети, необходимо применить к ним операцию поразрядной конъюнкции (логическое И).

IP-адрес: 11000000 10101000 00000001 00000010 (192.168.1.2)
Маска подсети: 11111111 11111111 11111111 00000000 (255.255.255.0)
Адрес сети: 11000000 10101000 00000001 00000000 (192.168.1.0)
Да дело не в этом. По сути машине безразлично, в каком виде хранятся данные...
Я спрашиваю, как реализовать работу алгоритма в консоле:
1) Ввод IP в виде 192.168.26.132.
2) Нажимаем enter, данные куда-то записались
Как игнорировать точки ?
0
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
11.10.2009, 20:31 #10
Я спрашиваю, как реализовать работу алгоритма в консоле:
Выделить и пропарсить 4 числа.
Например можно использовать функцию strtol().
0
Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
11.10.2009, 20:38  [ТС] #11
а нельзя более подробно пример ?
0
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
11.10.2009, 20:44 #12
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
char buf[100], *ptr;
int d0,d1,d2,d3;
 
strcpy( buf, "1.2.3.4" );
ptr= &buf[0];
d0= strtol( ptr, &endptr, 10 );
// обработка ошибок
ptr= endptr;
if ( ptr != '.' ) { // обработка ошибок
}
ptr++;
d1= strtol( ptr, &endptr, 10 );
// обработка ошибок
ptr= endptr;
if ( ptr != '.' ) { // обработка ошибок
}
ptr++;
d2= strtol( ptr, &endptr, 10 );
// обработка ошибок
ptr= endptr;
if ( ptr != '.' ) { // обработка ошибок
}
ptr++;
d3= strtol( ptr, &endptr, 10 );
// обработка ошибок
ptr= endptr;
if ( ptr != '\0' ) { // обработка ошибок
}
Добавлено через 2 минуты
Еще есть функции конвертации: inet_ntoa(), inet_aton()
Которые делают именно то что нужно
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.10.2009, 02:11 #13
Цитата Сообщение от Lorr
1) Ввод IP в виде 192.168.26.132.
2) Нажимаем enter, данные куда-то записались
C
1
2
3
4
5
    int a, b, c, d;
    char *addr = "127.0.0.1";
 
    if (sscanf(addr, "%d.%d.%d.%d", &a, &b, &c, &d) != 4)
        return 1;
0
Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
12.10.2009, 16:26  [ТС] #14
Цитата Сообщение от accept Посмотреть сообщение
C
1
2
3
4
5
    int a, b, c, d;
    char *addr = "127.0.0.1";
 
    if (sscanf(addr, "%d.%d.%d.%d", &a, &b, &c, &d) != 4)
        return 1;
a,b,c,d - 4 переменных для четырех актетов IP-адреса - это понятно...
А строка
C
1
 char *addr = "127.0.0.1";
что делает? Объявляет указатель на тип char. Но резервируется же область памяти 1 бай, как можно инициализировать строкой "127.0.0.1" ? Или я что то недопонял?

А вот этот кусок вообще непонятен
C
1
2
  if (sscanf(addr, "%d.%d.%d.%d", &a, &b, &c, &d) != 4)
        return 1;
0
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 16:32 #15
Используй inet_ntoa(), inet_aton()
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2009, 16:32
Привет! Вот еще темы с ответами:

Калькулятор - C++
Решил написать калькулятор, а вот и он: #include<conio.h> #include<locale.h> #include<stdio.h> #define END '0' #define ERROR 'a' ...

Калькулятор - C++
Вот сам калькулятор: #include<conio.h> #include<locale.h> #include<stdio.h> #define END '0' #define ERROR -1 #include<stdlib.h>...

Калькулятор - C++
Написал примитивный калькулятор: #include <iostream> #include <locale.h> #include <conio.h> using namespace std; int...

Калькулятор - C++
Есть такое условие: If(b=='+') s=a+b; как сделать так чтобы я мог додавать не два числа а a+b+...+n


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.10.2009, 16:32
Ответ Создать тему
Опции темы

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