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

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

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

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

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

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

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

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

Добавлено через 53 секунды
вывести их можно
Ему нужно преобразовать эти 4 октета в одно число типа long или unsigned long, чтобы можно было с ним работать.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
13.10.2009, 13:22
да это через маску делается

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
 Аватар для Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
13.10.2009, 14:40  [ТС]
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
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
 Аватар для Lorr
0 / 0 / 0
Регистрация: 21.04.2009
Сообщений: 21
14.10.2009, 03:18  [ТС]
accept, объясни пожалуйста что происходит в строках 15-21 ?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.10.2009, 07:06
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
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
14.10.2009, 12:55
Можно сразу.
C
1
n= (a<<24) | (b<<16) | (c<<8) | d;
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.10.2009, 14:15
вообще, там для цикла всё завёрнуто, чтобы можно было сделать octets[4] вместо a b c d
0
0 / 0 / 0
Регистрация: 05.01.2014
Сообщений: 10
05.01.2014, 13:33
можешь весь код кинуть плз)
0
05.01.2014, 13:53
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.01.2014, 13:53
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru