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

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

05.10.2009, 20:21. Показов 11014. Ответов 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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.10.2009, 03:38 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от 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);
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
13.10.2009, 08:52 22
почему приведенный мой вариант из описания не верный
Потому что endptr указывает на символ '.'
И нужно его сдвинуть вправо на один, чтобы strtol() работал.

Добавлено через 53 секунды
вывести их можно
Ему нужно преобразовать эти 4 октета в одно число типа long или unsigned long, чтобы можно было с ним работать.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.10.2009, 13:22 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;
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
13.10.2009, 14:40  [ТС] 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-х элементов. Но что-то тяжело так работать.
Не знаю как определять теперь широковещательный адрес...
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.10.2009, 01:35 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;
}
0
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
14.10.2009, 03:18  [ТС] 26
accept, объясни пожалуйста что происходит в строках 15-21 ?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.10.2009, 07:06 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
0
Эксперт С++
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
14.10.2009, 12:55 28
Можно сразу.
C
1
n= (a<<24) | (b<<16) | (c<<8) | d;
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.10.2009, 14:15 29
вообще, там для цикла всё завёрнуто, чтобы можно было сделать octets[4] вместо a b c d
0
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 10
05.01.2014, 13:33 30
можешь весь код кинуть плз)
0
alsav22
05.01.2014, 13:53     Калькулятор IP
  #31
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2014, 13:53

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

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

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

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


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

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