1

メソッドIPAddress(Int64)とメソッドInt32 HostToNetworkOrder(Int32)System.Net.IPAddress両方とも、IP アドレスに署名付きの型を使用します。

HostToNetworkOrderこれにより、コンストラクターへのパラメーターとして使用するときに結果をキャストする必要がIPAddress生じ、次のようなコードになります。

            UInt32 netOrderU32 = (UInt32)IPAddress.HostToNetworkOrder((Int32)ipVal);
            IPAddress tempIP = new IPAddress(netOrderU32);

network-order 値が unsigned でない場合、192.168.0.255 などのアドレスで ArgumentOutOfRangeException が発生します。IPAddress(Int64)これは、0x00000000FFFFFFFF よりも大きい値を受け入れないこと が原因である可能性がありますが、(net-order)192.168.0.255 の Int64 表現は、 Int32 からの変換時に 0xffffffffff00a8c0 になりますか?

IPアドレスに署名の概念がない場合でも、署名されたタイプを使用することに意味はありますか? 符号なしの型を使用する方がはるかに簡単なようです。

署名された型が選択された特定の理由はありますか?

4

1 に答える 1

2

この場合、署名されていないものよりも署名されているものを選択するのは、特定のプラットフォームが署名された番号と署名されていない番号を処理する方法のためであるように思われます。

この投稿では、明示的な符号なし型を提供しない言語との移植性を維持できるように、.NET ライブラリと関数が符号なしではなく符号付き整数を使用する必要があるという事実に光を当てています。

この投稿では、符号なし整数は CLS に準拠していないため、C# が符号付き整数を使用することを選択した理由について詳しく説明します。詳細については、こちらをご覧ください。

特定のアプリケーションの全体像 (およびバイトスワッピングの必要性) がなければ、ここで行っていることが実際に問題があるかどうかを判断するのは困難です。

于 2014-10-25T01:35:12.827 に答える