質問 |
||
| 質問者:kyouju | PHP「ip2long」について | |
|---|---|---|
困り度:
|
「ip2long」について教えてください。 マニュアルを見ると「インターネットプロトコルドット表記のアドレスを適当なアドレ スを有する文字列に変換する」とありますが、「適当なアドレ スを有する文字列」とは何なんでしょうか? 以下のソースを実行すると画面に -800211802 が表示されますが、これが「適当なアドレ スを有する文字列」なのでしょうか? この文字列は何進数なんでしょうか? <?php $ip = gethostbyname('www.example.com'); echo(ip2long($ip)); ?> sprintf("%u", ip2long($ip)) とするとロングIPアドレス(符号無しの 10 進数)になるってことは10進数ではないのでしょうけど・・・ GoogleのIPアドレス 66.249.89.99 だと正の数値 1123637603 が返されます。 正と負の違いはなんなんでしょうか??? 宜しくお願いいたします。 |
|
質問投稿日時:08/03/20 03:15 質問番号:3878196 |
||
回答良回答20pt |
|
| 回答者:SAYKA | >66.249.89.99 だと正の数値 1123637603 この値を16進変換して全部繋げてそれを10進数に戻してごらん。 正負の違いは2進変換したときの最上位桁が0か1か。その辺りは2進数での正負の表現で調べてね。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/20 05:20 回答番号:No.1 |
|
| この回答への補足 | SAYKAさんありがとうございます。 ご教授いただきましたように2つのIPアドレスを変換してみました。 66.249.89.99 ↓ ↓16進数変換 ↓ 42F95963 ↓ ↓10進数変換 ↓ 1123637603 ↓ ↓2進数変換 ↓ 1000010111110010101100101100011 208.77.188.166 ↓ ↓16進数変換 ↓ D04DBCA6 ↓ ↓10進数変換 ↓ 3494755494 ↓ ↓2進数変換 ↓ 11010000010011011011110010100110 「66.249.89.99」→「1123637603」は納得できるのですが、「208.77.188.166」→「-800211802」は何故なんでしょうか??? 「208.77.188.166」→「3494755494」ではないのでしょうか。 2進変換したときの最上位桁は両方とも「1」ですよね? |
| この回答へのお礼 | 「01000010111110010101100101100011」 「11010000010011011011110010100110」 なんですね。。。 理解できました、ありがとうございます。 |