6 / 6 / 11
Регистрация: 28.05.2014
Сообщений: 52

Определить адрес сети по заданному IP адресу и маске

05.06.2015, 18:09. Показов 4654. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!. Потихоньку изучаю C , решил написать программу которая определяет адрес сети по заданному IP адресу и маске. Суть в том , что адрес сети получается путем поразрядной конъюнкции к ip и маске сети. Так вот вопрос , можно ли и как избавить код от лишних переменных? Т.е сделать так , что бы можно было бы ввести , допустим , 4 числа через пробел и они запомнились в одну переменную?. Я просто не знаю как это сделать , поэтому пришлось нагородить вот такой вот ужас.
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
#include <stdio.h>
 
int main (void) {
    
    setlocale(0,"russian");               /* Включаем поддержку русского языка */
    
    int ip1;
    int ip2;
    int ip3;
    int ip4;
    int mask1;
    int mask2;
    int mask3;
    int mask4;
    int addr1;
    int addr2;
    int addr3;
    int addr4;
    
    printf("Введите IP адрес узла:\n");
    
    scanf("%d",&ip1);
    scanf("%d",&ip2);
    scanf("%d",&ip3);
    scanf("%d",&ip4);
 
    printf("Введите маску:\n");
    
    scanf("%d",&mask1);
    scanf("%d",&mask2);
    scanf("%d",&mask3);
    scanf("%d",&mask4);
    
    /* Поразрядная конъюнкция к IP адресу и маске.  */
    
    addr1 = (ip1 & mask1);           
    addr2 = (ip2 & mask2);
    addr3 = (ip3 & mask3);
    addr4 = (ip4 & mask4);
    
    printf("%d %d %d %d", addr1, addr2, addr3, addr4);
    
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2015, 18:09
Ответы с готовыми решениями:

По заданным IP-адресу узла сети и маске определите адрес сети
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу...

По ip-адресу и маске подсети получить адрес сети
Николай знает, что по ip-адресу и маске подсети можно получить адрес сети, но не знает, как именно это делается. Помогите ему сделать это...

Сети. как узнать адрес сети, маску, ... по IP адресу?
Кто может чем помочь? Делаю лабу, нужно из диапозона IP адресов (например 10.70.25.10 - 10.70.25.40) узнать адрес сети, маска, адрес шлюза,...

6
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
05.06.2015, 18:17
ну вообще-то для хранения адреса или маски достаточно одного инта, а не четырёх.
адрес это 4 байта, инт тоже
0
6 / 6 / 11
Регистрация: 28.05.2014
Сообщений: 52
05.06.2015, 18:28  [ТС]
Так я и хочу сделать так.
Можно ли реализовать такой ввод числа через точку что бы оно потом запомнилось в одну переменную?
Допустим "Введите IP: 192.168.8.9".
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
05.06.2015, 18:54
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int func(int a, int b, int c, int d) {
    return (a << 24) | (b << 16) | (c << 8) | d;
}
 
void print(int ip) {
    printf("%d.%d.%d.%d\n",
           (unsigned)ip >> 24, (ip >> 16) & 0xff,
           (ip >> 8) & 0xff, ip & 0xff);
}
 
int main() {
    int ip = func(192, 168, 164, 1);
 
    print(ip);
 
    return 0;
}
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
05.06.2015, 18:58
Цитата Сообщение от qwertynor Посмотреть сообщение
Так я и хочу сделать так.
посмотри что такое union
http://programmersclub.ru/19/
например для данной задачи
C++
1
2
3
4
5
6
union IPAddr 
 
 { 
    int IPint; 
    unsigned char IPchar[4]; 
 };
можешь работать как с int так и с четырьмя байтами
1
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
05.06.2015, 21:27
ValeryS, только вспомнил про обьединения
Хотел предложить вариант такой
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
struct Bits
{
    int p1: 8;
    int p2: 8;
    int p3: 8;
    int p4: 8;
}

Попробовать чтото придумать с битовыми полями, можно как то связать это с обьединением и думаю не плохо выйдет, ну или нет
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
05.06.2015, 22:53
Цитата Сообщение от obivan Посмотреть сообщение
Попробовать чтото придумать с битовыми полями,
можно, но они в отличии от штатных, так скажем, типов не адресуются
вот пример недавно был
Как представить int в двоичном коде
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.06.2015, 22:53
Помогаю со студенческими работами здесь

Как вычислить диапазон ip адресов по адресу и маске сети?
Как в консоли вычислить диапазон ip адресов по адресу и маске сети? Число после символа '/' означает количество единиц в маске сети (от 0...

Как определить IP-адрес сети, зная IP-адрес узла назначения и маску сети
Добрый вечер, форумчане! Дали задачку одну: &quot;Найти IP-адрес сети, зная IP-адрес узла назначения=12.34.56.83 и маску...

Узнать ip-адрес компьютера в локальной сети по почтовому адресу (входящих писем нет, сервер почты в домене)
Добрый день! Подскажите, пожалуйста, существует ли возможность внутри одной локальной сети узнать ip-адрес чужого компьютера, имея адрес...

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

Очень интересная задача! Для адреса 93.175.16.7/24 вычислить маску сети, широковещательный адрес, адрес сети
А вам по силам справиться? Для адреса 93.175.16.7/24 вычислить маску сети, широковещательный адрес, адрес сети, сколько компьютеров...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
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