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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.88
Lorr
 Аватар для Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
05.10.2009, 20:21     Калькулятор IP #1
Нужно написать программку, которая обрабатывает значения ip и маски, и выводит информацию (число сетей, узлов и т.д.). В связи с небольшим опытом программирования, не знаю как интерпретировать ip на языке, не знаю как записать и где сохранить. Какие могут быть варианты, с учетом более удобной дальнейшей работы с адресом.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2009, 20:21     Калькулятор IP
Посмотрите здесь:

Калькулятор на С++ C++
C++ Калькулятор на С
C++ Калькулятор
Калькулятор C++
Калькулятор C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.10.2009, 03:38     Калькулятор IP #21
Цитата Сообщение от Lorr
что делает? Объявляет указатель на тип char. Но резервируется же область памяти 1 бай, как можно инициализировать строкой "127.0.0.1" ? Или я что то недопонял?
указатель на тип char - это переменная, которая хранит адрес переменной типа char, вообще, она хранит адрес объекта, поэтому, когда здесь переменной нет, есть строка в статической области памяти с которой можно прочитать

функция sscanf читает с этой строки адрес по кусочкам
и они сохранены в виде простых чисел в a, b, c, d

вывести их можно
C
1
    printf("%d.%d.%d.%d" "\n", a, b, c, d);
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
13.10.2009, 08:52     Калькулятор IP #22
почему приведенный мой вариант из описания не верный
Потому что endptr указывает на символ '.'
И нужно его сдвинуть вправо на один, чтобы strtol() работал.

Добавлено через 53 секунды
вывести их можно
Ему нужно преобразовать эти 4 октета в одно число типа long или unsigned long, чтобы можно было с ним работать.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
13.10.2009, 13:22     Калькулятор IP #23
да это через маску делается

C
1
2
3
4
5
6
7
    unsigned long addr;
 
    addr = 0;
    addr |= a << 3*8;
    addr |= b << 2*8;
    addr |= c << 8;
    addr |= d;
Lorr
 Аватар для Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
13.10.2009, 14:40  [ТС]     Калькулятор IP #24
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
#include <iostream>
#include <cstdlib>
#include <stdlib.h>
 
 
using namespace std;
 
    
int main()
{
   char stringIP[16];  //Строка с ИП
   char stringM[16]; //Строка с маской
   cout << "Enter IP: "; cin >> stringIP;
   cout << "Enter Mask: "; cin >> stringM;
   char *str, *pEnd;
   
   int akIP[4], //массив, каждый элемент которого есть октет ИП
   akM[4],  //тоже самое с масокой
   akAS[4];  //для записи адреса сети
   
   //Здесь преобразуем ИП в число и записываем в массив
   akIP[0]=strtol(stringIP, &pEnd, 10);
   str = pEnd; str++;
   akIP[1]=strtol(str, &pEnd, 10);
   str=pEnd; str++;
   akIP[2]=strtol(str, &pEnd, 10);
   str=pEnd; str++;
   akIP[3]=strtol(str, &pEnd, 10);
   
   //здесь делаем тоже самое с маской
   akM[0]=strtol(stringM, &pEnd, 10);
   str = pEnd; str++;
   akM[1]=strtol(str, &pEnd, 10);
   str=pEnd; str++;
   akM[2]=strtol(str, &pEnd, 10);
   str=pEnd; str++;
   akM[3]=strtol(str, &pEnd, 10);
   
   //Здесь определяем сетевой адрес и выводим его...
   cout << endl << "Network address: " ;
   for(int i=0; i<4; i++) {
   akAS[i]=akIP[i] & akM[i];
   cout << akAS[i]; if(i==3)break; cout << ".";
} cout << endl;
 
  
    system("pause");
    return 0;
}
Вот что получислось.
Для хранения адресов выбрал массивы из 4-х элементов. Но что-то тяжело так работать.
Не знаю как определять теперь широковещательный адрес...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.10.2009, 01:35     Калькулятор IP #25
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
main()
{
    unsigned long n;
    int a, b, c, d;    
        
    a = 127;
    b = 0;
    c = 0;
    d = 1;
        
    n = 0;    
    n |= a << 3*8;    
    n |= b << 2*8;
    n |= c << 1*8;
    n |= d << 0*8;
        
    printf("%lx" "\n", n);    
        
    return 0;
}
Lorr
 Аватар для Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
14.10.2009, 03:18  [ТС]     Калькулятор IP #26
accept, объясни пожалуйста что происходит в строках 15-21 ?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.10.2009, 07:06     Калькулятор IP #27
C
1
2
3
4
5
    int a = 3;
 
    a |= 4;
 
    printf("%d" "\n", a);
выведет 7

a:
00000000 00000000 00000000 00000011

4:
00000000 00000000 00000000 00000100

a |= 4:
00000000 00000000 00000000 00000111

<< - сдвигает влево, дополняя нулями, пока нет переполнения это эквивалентно умножению на два

ты пододвигаешь нужное число на место, где оно должно быть, а потом применяешь операцию побитового "сложения", таким образом октеты занимают свои места в четырёх байтах переменной типа unsigned long
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
14.10.2009, 12:55     Калькулятор IP #28
Можно сразу.
C
1
n= (a<<24) | (b<<16) | (c<<8) | d;
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.10.2009, 14:15     Калькулятор IP #29
вообще, там для цикла всё завёрнуто, чтобы можно было сделать octets[4] вместо a b c d
kirs2
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 10
05.01.2014, 13:33     Калькулятор IP #30
можешь весь код кинуть плз)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2014, 13:53     Калькулятор IP
Еще ссылки по теме:

Калькулятор C++
Калькулятор C++
Простой калькулятор и калькулятор с парсингом C++

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

Или воспользуйтесь поиском по форуму:
alsav22
05.01.2014, 13:53     Калькулятор IP
  #31
Yandex
Объявления
05.01.2014, 13:53     Калькулятор IP
Ответ Создать тему
Опции темы

Текущее время: 00:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru