Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/58: Рейтинг темы: голосов - 58, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
1

Калькулятор IP

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

Author24 — интернет-сервис помощи студентам
Нужно написать программку, которая обрабатывает значения ip и маски, и выводит информацию (число сетей, узлов и т.д.). В связи с небольшим опытом программирования, не знаю как интерпретировать ip на языке, не знаю как записать и где сохранить. Какие могут быть варианты, с учетом более удобной дальнейшей работы с адресом.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2009, 20:21
Ответы с готовыми решениями:

Как преобразовать обычный калькулятор в калькулятор использующий класс стек?
#include <iostream> int main(){ int a = 0; int b = 0; char operation; ...

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

Калькулятор
Доброго времени суток! Ребята, у меня проблема вот в чем, хочу сделать калькулятор. Пример, есть...

Калькулятор
Решил написать калькулятор с графическим интерфейсом, который будет реагировать на мышь. Основу...

30
53 / 53 / 8
Регистрация: 21.03.2009
Сообщений: 371
05.10.2009, 21:23 2
А разбиения на логические подсети надо учитывать?
0
1183 / 468 / 87
Регистрация: 23.06.2009
Сообщений: 6,390
05.10.2009, 22:23 3
Lorr, выучи класс csocet
0
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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
06.10.2009, 05:33 5
Цитата Сообщение от Lorr
не знаю как записать и где сохранить
адрес занимает четыре байта, поэтому хранить можно в переменной типа unsigned long
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
06.10.2009, 20:58 6
Есть еще IPv6 - там адрес занимает 16 байт.
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
11.10.2009, 20:16  [ТС] 7
Цитата Сообщение от odip Посмотреть сообщение
Есть еще IPv6 - там адрес занимает 16 байт.
Ну 6-я версия IP была успешно разработана и так же успешно положена на полку.
Так что нет необходимости обеспечивать функционал для поддрежки этого стандарта
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
11.10.2009, 20:18 8
6-я версия IP была успешно разработана и так же успешно положена на полку
Ничего подобного.
До сих пор допиливают
Vista/2008/Windows7 по умолчанию имеют включенный IPv6
0
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
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
11.10.2009, 20:31 10
Я спрашиваю, как реализовать работу алгоритма в консоле:
Выделить и пропарсить 4 числа.
Например можно использовать функцию strtol().
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
11.10.2009, 20:38  [ТС] 11
а нельзя более подробно пример ?
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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
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
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 16:32 15
Используй inet_ntoa(), inet_aton()
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
12.10.2009, 16:39  [ТС] 16
Цитата Сообщение от odip Посмотреть сообщение
Выделить и пропарсить 4 числа.
Например можно использовать функцию strtol().
long int strtol ( const char * str, char ** endptr, int base );
Это прототип функции. Т.е. как я понял, получает функция три параметра
str - указатель на нашу стркоу
endptr - указатель на символ, который считается концом строки ? Почему ти идет как указатель на указатель на char ?
base - параметр, определяющий систему исчисления ?

Что не так понял ?

Добавлено через 56 секунд
Цитата Сообщение от odip Посмотреть сообщение
Используй inet_ntoa(), inet_aton()
Я просто разобраться хочу в работе функций
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 16:57 17
2Lorr: У тебя какой компилятор ?
Открой описание функции и почитай что делает.
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
12.10.2009, 17:28  [ТС] 18
Цитата Сообщение от odip Посмотреть сообщение
2Lorr: У тебя какой компилятор ?
Открой описание функции и почитай что делает.
Dev и VS8 без help'a

Нашел описание, как работает в общих чертах понял (strtol);
В описании пример был, не понял один момент.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
 
int main ()
{
  char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
  char * pEnd;
  long int li1, li2, li3, li4;
  li1 = strtol (szNumbers,&pEnd,10);
  li2 = strtol (pEnd,&pEnd,16);
  li3 = strtol (pEnd,&pEnd,2);
  li4 = strtol (pEnd,NULL,0);
  printf ("The decimal equivalents are: %ld, %ld, %ld and %ld.\n", li1, li2, li3, li4);
  return 0;
}
При запуске программы, создается строка и указатель на char и четыре переменных, которым будут присвоены результаты работы функции strtol.
Встроке
li1 = strtol (szNumbers,&pEnd,10); функции передается строка символов, которую необходимо интерпретировать в число, указатель, по адресу в котором запишется символ, на котором остановлено преобразование строки, и идентификатор системы исчисления.
li2 = strtol (pEnd,&pEnd,16); но почему в этой строке в качестве строки с символами, которые нужно интерпретировать в число, передается по сути символ, на котором было остановлено преобразование в первый вызов функции ?
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
12.10.2009, 18:27 19
http://opennet.ru/man.shtml?to... &russian=0
http://www.codenet.ru/progr/cp... trtoul.php

Ты неправильно делаешь !!!
Правильно как у меня:
C
1
2
3
4
d1= strtol( ptr, &endptr, 10 );
ptr= endptr;
ptr++;
d2= strtol( ptr, &endptr, 10 );
Добавлено через 41 секунду
А вообще быстрее может быть inet_aton() использовать.
Или вообще написать свой парсер без strtol()

Добавлено через 8 минут
Dev и VS8 без help'a
К Visual Studio 2008 скачай MSDN help.

В Internet полно документации.

А как ты программы пишешь, если ни одной функции не знаешь ?
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
12.10.2009, 19:57  [ТС] 20
Цитата Сообщение от odip Посмотреть сообщение

А как ты программы пишешь, если ни одной функции не знаешь ?
Плохо пишу =(

Добавлено через 27 минут
Цитата Сообщение от odip Посмотреть сообщение
http://opennet.ru/man.shtml?to... &russian=0
http://www.codenet.ru/progr/cp... trtoul.php

Ты неправильно делаешь !!!
Правильно как у меня:
C
1
2
3
4
d1= strtol( ptr, &endptr, 10 );
ptr= endptr;
ptr++;
d2= strtol( ptr, &endptr, 10 );
Сори за настырность, но объясните почему приведенный мой вариант из описания не верный...
0
12.10.2009, 19:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2009, 19:57
Помогаю со студенческими работами здесь

Калькулятор
Здравствуйте! Задача такая: написать калькулятор, но не простой, а читающий пример из файла. Узнал,...

Калькулятор
Калькулятор хотел создать на Дельфи не получается я новичок еще помагите пожалуйста

Калькулятор
Не могу понять как работает javascript в коде HTML может чего- то забыл написать... А точнее не...

Калькулятор
проблема с калькулятором на виндовс 7. на калькуляторе видно пол рабочей облости, а цифры...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru