痔になりやすい生活習慣とは?

例えば、ネットワークアドレスが192.168.0.1/24と与えられた場合に、マスク長の24を読み込んで、255.255.255.0を返すようなコードを作成したいのですが、任意のマスク長を与えて正しいアドレスを返すうまい方法が思いつきません。教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

便利な関数とかモジュールとかありそうな気がするんですが、見つけられなかったのでガリガリ書いてみました。



sub get_subnet_mask {
  my ($network_addr) = @_;
  my $mask_bits = (split '/', $network_addr)[1];
  my $mask = -1 << (32-$mask_bits);
  return join '.', unpack "CCCC", pack "N", $mask;
}

print get_subnet_mask('192.168.0.1/24');

# 255.255.255.0

※インデントに全角空白を使っているので、コピーする場合はタブなどに置き換えてください。
    • good
    • 0
この回答へのお礼

いつもありがとうございます。
ただ、高度すぎていまいちわかってませんが・・・

ネットワークアドレスとブロードキャストアドレスを求めるコードも教えていただけるとうれしいです。
もし、よければお願いします。勝手なお願いですが・・・・

お礼日時:2004/08/11 18:50

やっぱりありましたね、便利なモジュール^^;>No.3


というわけで、これらをインストールして使いましょう。
# 無いわけ無いだろうと思ってたんですよね・・・
    • good
    • 0

>便利な関数とかモジュール


この辺でしょうか?
(もちろんmask、nerwork、broadcastもOK)

http://search.cpan.org/~frajulac/Net-IPv8Adddr-0 …

http://search.cpan.org/~muir/Net-Netmask-1.9011/ …
    • good
    • 0

Perlはアレなんですけど,マスク長の「24」が何かっつーと,


「全体で32bitのうち先頭から24bitが1だよん」って事
なんで,そこから考えれば?

・32bitのうち,与えられたbit数だけ先頭から1にする
・8桁毎に10進数に変換する

とかそんな感じの力技でもいけそうな気が。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング