DOBON.NET DOBON.NETプログラミング掲示板過去ログ

IPAddress.Parseで解析し、ToStringすると思わぬ出力結果になる

環境/言語:[WindowsXP:VisualStudio2005:VB.NET:.NET Framework2.0]
分類:[.NET]

お世話になります。

System.Net名前空間のIPAddressクラスでParseメソッドを使用したときの動きについてご教示願います。

System.Net.IPAddress.Parseメソッドに "192.108.052.027" を指定して IPAddress のインスタンスを生成し、
そのインスタンスの ToString メソッドを使用すると "192.108.42.23" という出力結果になります。

これは正しい動きなのでしょうか?

(想定では左側の0が除去された "192.108.52.27" という結果になると思っていました。)

- コード例(VB.NET) -

Dim ipAdrs As IPAddress = IPAddress.Parse("192.108.052.027")
MessageBox.Show(ipAdrs.ToString()) ' 出力結果:192.108.42.23
http://social.msdn.microsoft.com/Forums/ja-JP/vsfeedbackja/thread/caffbbc3-cc2c-4140-8363-3984bd018ea9
https://connect.microsoft.com/VisualStudio/feedback/details/705067/ipaddress-tryparse-fails-to-parse-valid-ipaddress
Windowsの仕様です。たとえばコンソールで「ping 010.010.010.010」をやっても、8.8.8.8にpingが飛びます。

// でもドキュメントに10進数表記って明記されているのに8進数として扱うってのはどうなんでしょうね。
Hongliangさん、ご回答ありがとうございます。
先頭に0を付けると8進数扱いされてしまうのですね。

■No30734に返信(Hongliangさんの記事)
> // でもドキュメントに10進数表記って明記されているのに8進数として扱うってのはどうなんでしょうね。

確かに、.net2.0のMSDNの説明には10進表記(IPv4の場合)の説明しかなく8進表記の説明はありませんでした。
http://msdn.microsoft.com/ja-jp/library/system.net.ipaddress.parse%28v=vs.80%29.aspx

もしやと思い、先ほど.net4.0の説明を確認したところ、8進数の説明が増えていましたっ!!
引用:
「Parse メソッドは、IPv4 アドレスに対して、8 進数、10 進数、および 16 進数の ipString パラメーターを受け付けます (混在している場合でも)。」
http://msdn.microsoft.com/ja-jp/library/system.net.ipaddress.parse.aspx

Hongliangさんのおかげで解決することができました。
ありがとうございましたm(__)m
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板