【发布时间】:2014-10-25 01:21:14
【问题描述】:
System.Net.IPAddress 中的方法 IPAddress(Int64) 和 Int32 HostToNetworkOrder(Int32) 都使用签名类型的 IP 地址。
这使得在将HostToNetworkOrder 的结果用作IPAddress 构造函数的参数时,必须将结果转换为IPAddress 构造函数,从而产生如下代码:
UInt32 netOrderU32 = (UInt32)IPAddress.HostToNetworkOrder((Int32)ipVal);
IPAddress tempIP = new IPAddress(netOrderU32);
如果network-order值不是无符号的,192.168.0.255等地址会引发ArgumentOutOfRangeException。这可能是由于IPAddress(Int64) 不接受大于 0x00000000FFFFFFFF 的值但从 Int32 转换时 (net-order)192.168.0.255 的 Int64 表示为 0xffffffffff00a8c0 引起的吗?
即使 IP 地址没有任何签名概念,使用签名类型有什么意义吗?似乎只使用无符号类型会简单得多。
选择签名类型有什么具体原因吗?
【问题讨论】:
-
简单地说,无符号类型不是
CLSCompliant
标签: c# .net network-programming signedness