アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

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


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

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

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

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



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

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


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

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

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

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


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

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