PowerShell и другие скрипты

13.3.2008

IP адрес в двоичный формат…

Рубрика: Learn, PowerShell, Scripting — Xaegr @ 16:11

… или что бывает когда маньякам скучно :)

Преобразовываем IP адрес в строчку битов, одной строчкой ;)

oneliner2

Или тоже самое, но в несколько строк, с пробелами и комментариями ;)

# Разделяем адрес на октеты ("192.168.1.1".split(".")| # Foreach-Object %{ # Помещаем текущий октет в переменную $o $o=$_; # for ($_ = 7; $_ -ge 0; $_ --) {... 7..0|%{ # Возводим 2 в степень текущего числа содержащегося в # переменной $_. Делаем binary and с текущим октетом, преобразуем в # [bool] (нули станут $false, а остальные числа - $true. Преобразуем в # [int] ($true становится 1, а $false - 0). [int][bool]($o -band [math]::pow(2,$_)) } # объединяем получившийся массив битов в строчку }) -join ""

Гложет подозрение что это делается сильно проще и короче :) Подскажите кто-нибудь пожалуйста ;)

UPD: Спасибо Вадиму, в результате получилось вполне адекватно и в 2 раза короче :)

[convert]::ToString(([net.ipaddress]”192.168.1.1″).address,2)

Вру, не то получается… ;)

Комментарии (8) »

  1. System.Convert.ToString(value, toBase)?

    хотя биты тоже неплохо :)

    Комментарий от Vadim — 13.3.2008 @ 16:54

  2. 2 Vadim: Сорри, у меня тут д.р. у сотрудницы, я может туплю, но что подставлять в toBase? :) а то там оверлоадов ужас сколько :)
    Value – это будет ведь «192.168.1.1″? :)

    Комментарий от Xaegr — 13.3.2008 @ 17:14

  3. не :)
    value – числа 192, 168, 1, 1 на выбор :)
    toBase должно быть 2!

    позволит избавиться от возни с битами

    Комментарий от Vadim — 13.3.2008 @ 17:37

  4. не факт, что короче получится, конечно :) но проще

    Комментарий от Vadim — 13.3.2008 @ 17:39

  5. Вот чувствовал я что в .Net уже есть что то мне в помощь :) Спасибо! :)
    Хотя не сильно короче вышло…
    («192.168.1.1″.split(«.»)|%{[System.Convert]::ToString($_,2).PadLeft(8,»0″)}) -join «»

    Комментарий от Xaegr — 13.3.2008 @ 17:43

  6. Вот что вытворил в результате :)
    [convert]::ToString(([net.ipaddress]«192.168.1.1″).address,2)

    Комментарий от Xaegr — 13.3.2008 @ 20:14

  7. А зачем преобразовывать в строку? Где такое может понадобится?
    Обычно адрес переводят в 4 байта, чтобы места при хранении меньше занимало: IP-адрес = 4 байт, и ни битом больше!

    Комментарий от Ugnich Anton — 14.3.2008 @ 16:14

  8. 2 Ugnich Anton: Я же написал в начале – «маньякам скучно» ;) Мне хотелось именно посмотреть на биты :)

    Комментарий от Xaegr — 14.3.2008 @ 16:16


RSS-лента комментариев к этой записи. URI для обратной ссылки

Оставить комментарий

Блог на WordPress.com.