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

Преобразовать IP-адрес в двоичную систему

08.07.2015, 16:47. Показов 2548. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Может у кого есть скрипт преобразовать ip адрес в двоичную систему?
Так как с преобразованием простого числа в двоичную проблем ни каких
PHP
1
2
3
<?php
echo decbin(12) ;
?>
а вот с таким числом 5.100.192.0 или 46.53.129.0 возникают проблема.
типа как здесь http://infocisco.ru/ip_to_bin.php
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.07.2015, 16:47
Ответы с готовыми решениями:

Преобразовать число в двоичную систему JavaScript
Нужна функция, которая преобразует из десятичной системы в бинарную. ХЭЛБ плиз :)

Из числа в двоичную систему
Есть готовая программа перевода числа в двоичный код. И мне нужно сделать из него визуальную...

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

Перевод в двоичную систему
Здравствуйте, написал алгоритм перевода введённого числа в двоичную систему. Проблема в том, что...

13
Native x86
Эксперт Hardware
5514 / 3273 / 934
Регистрация: 13.02.2013
Сообщений: 10,425
08.07.2015, 17:01 2
Цитата Сообщение от GaLs Посмотреть сообщение
а вот с таким числом 5.100.192.0 или 46.53.129.0 возникают проблема.
5.100.192.0 или 46.53.129.0 -- это не числа ни разу, а строки.
Их можно разбить при помощи split() на массив чисел, а потом каждое число в цикле преобразовать вызовом decbin(), дописав результат в конец строковой переменной, которая по завершении цикла будет содержать результат.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.07.2015, 17:01 3
Лучший ответ Сообщение было отмечено GaLs как решение

Решение

PHP
1
var_dump(decbin(ip2long('5.100.192.0')));
1
1 / 1 / 0
Регистрация: 08.07.2015
Сообщений: 20
08.07.2015, 17:21  [ТС] 4
KOPOJI круто спс хоть что то похожее но все ровно не правильное преобразование 101011001001100000000000000,или правильно просто нули с начало не показывает, так как через http://infocisco.ru/ip_to_bin.php у меня выводит 00000101011001001100000000000000

Добавлено через 3 минуты
может надо написать base_convert пару функций обработки строк
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.07.2015, 17:25 5
не надо ничего писать. Просто вывод подкорректировать, добавить ведущие нули (если требуется)
PHP
1
var_dump(sprintf("%032s", decbin(ip2long('5.100.192.0'))));
1
1 / 1 / 0
Регистрация: 08.07.2015
Сообщений: 20
09.07.2015, 10:55  [ТС] 6
Добавлено через 2 минуты
а как в твой скрип добавить
PHP
1
rtrim($var, '0')
чтоб обрезала нули в конце допустим до 21 типа 00000101011001001100

Добавлено через 13 часов 6 минут
есть еще такой вопрос вот скрипт который преобразовывает ip в 2сс:
PHP
1
2
3
4
5
6
7
<?php
$mask='5.100.192.0';
$maskArr = explode('.',$mask);
$binmask = sprintf( "%08d", decbin($maskArr [0])).sprintf( "%08d", decbin($maskArr [1])).sprintf( "%08d", decbin($maskArr [2])).sprintf( "%08d", decbin($maskArr [3]));
$binmask = substr($binmask,0,21);
print $binmask;
?>
он работает по определенному ip который задаешь в переменной $mask. А мне надо чтоб с помощью $res = fopen('txt.txt', 'r'); он открывал фай в котором записаны ip адреса в виде
Кликните здесь для просмотра всего текста
5.100.192.0/21
5.100.200.0/21
5.100.208.0/21
5.100.216.0/17
31.24.88.0/18

читал по строчно и каждый ip преобразовывал в 2сс и записывал в другой файл в виде:
Кликните здесь для просмотра всего текста
000001010110010011000
000001010110010011001
000001010110010011010
000001010110010011011
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.07.2015, 17:08 7
Цитата Сообщение от GaLs Посмотреть сообщение
чтоб обрезала нули в конце допустим до 21 типа 00000101011001001100
не понял, насчет какого-то 21 типа..
Цитата Сообщение от GaLs Посмотреть сообщение
читал по строчно и каждый ip преобразовывал в 2сс и записывал в другой файл в виде
PHP
1
2
3
4
5
6
7
function bin2cc($ip)
{
    $ip = explode('.', $ip);
    array_walk($ip, 'decbin');
    return substr(sprintf("%08d%08d%08d%08d", $ip[0], $ip[1], $ip[2], $ip[3]), 0, 21);
}
file_put_contents('./output.txt', join(PHP_EOL, array_map('bin2cc', file('./txt.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES)));
1
1 / 1 / 0
Регистрация: 08.07.2015
Сообщений: 20
09.07.2015, 22:09  [ТС] 8
21 типа я не так правильно выразился.

Смысл в том что все 800 ip адреса в текстовом файле записаны в виде 192.168.111.0/26, где 192.168.111.0 - адрес подсети, а /26 - префикс(по количеству единиц в двоичном представлении маски). И префикс в некоторых 21 в некоторых 17 или 24.

Так вот я и хотел чтоб скрипт читал файл брал допустим первый ip в виде 192.168.111.0/26 и преобразовывал в бинарный код вот такой 11000000.10101000.01101111.00 (26 цифр), потом читал вторую строку там допустим ip 192.168.200.0/17 получится 11000000.10101000.1 (17 цифр) и т.д )
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.07.2015, 23:12 9
Лучший ответ Сообщение было отмечено GaLs как решение

Решение

PHP
1
2
3
4
5
6
7
function bin2cc($ip)
{
    list($ip, $mask) = explode('/', $ip);
    $ip = array_map('decbin', explode('.', $ip));
    return substr(sprintf("%08d.%08d.%08d.%08d", $ip[0], $ip[1], $ip[2], $ip[3]), 0, (int) $mask);
}
file_put_contents('./output.txt', join(PHP_EOL, array_map('bin2cc', file('./txt.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES))));
1
1 / 1 / 0
Регистрация: 08.07.2015
Сообщений: 20
10.07.2015, 08:40  [ТС] 10
KOPOJI спс большое за скрипт. Мне вот еще один написали тоже сказали что выполняет что хочу:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
file_put_contents(
  'output', 
  join(
    PHP_EOL, 
    array_map(
      function ($sInput) {
        list($ip, $mask) = explode('/', trim($sInput));
        return substr(str_pad(decbin(ip2long($ip)), 32, 0, STR_PAD_LEFT), 0, $mask);
      }, 
      file('input', FILE_SKIP_EMPTY_LINES))
    )
  );
?>
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.07.2015, 09:16 11
Это тоже самое, только используется анонимная функция и немного по другому формируется число. Используйте то, что вам удобнее
0
1 / 1 / 0
Регистрация: 08.07.2015
Сообщений: 20
10.07.2015, 09:36  [ТС] 12
да там скрипт считывает массив строк в фаиле input, и к каждои строке применяет анонимную функцию.

А про твой скрипт если не сложно, можешь объяснить где что за что отвечает?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.07.2015, 11:09 13
Я же говорю, скрипт такой же. Разница в том, что используется не анонимная функция, и число генерируется по другому. Принцип работы тот же. Причем, судя по некоторым частям кода, этот код - просто слегка измененный и отформатированный мой предыдущий код
1
1 / 1 / 0
Регистрация: 08.07.2015
Сообщений: 20
10.07.2015, 11:10  [ТС] 14
понял спс большое
0
10.07.2015, 11:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2015, 11:10
Помогаю со студенческими работами здесь

Перевод в двоичную систему
Есть такой рабочий код #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; int...

Перевод в двоичную систему
Помогите пожалуйста перевести натуральное число в двоичную систему, но только не этим способом, и...

Перевод в двоичную систему!
Здравствуйте, задание перевести флоат в двоичный код с мантисой порядком и всем таким, я там уже...

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


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

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