System.Net.IPAddress
中的方法IPAddress(Int64)
和Int32 HostToNetworkOrder(Int32)
都对IP地址使用签名类型。
这使得在将HostToNetworkOrder
的结果用作IPAddress
构造函数的参数时,有必要将其强制转换为以下代码:
UInt32 netOrderU32 = (UInt32)IPAddress.HostToNetworkOrder((Int32)ipVal);
IPAddress tempIP = new IPAddress(netOrderU32);
如果网络顺序值未签名,则192.168.0.255等地址将导致ArgumentOutOfRangeException。这可能是由于IPAddress(Int64)
不接受大于0x00000000FFFFFFFF的值,但从Int32转换时(净订单)192.168.0.255的Int64表示为0xffffffff00a8c0引起的吗?
即使IP地址没有任何签名性的概念,使用签名类型有什么意义吗?似乎只使用无符号类型会简单得多。
为什么选择签名类型,有什么具体的原因吗?
在这种情况下,选择有符号数字而不是无符号数字似乎是因为某些平台如何处理有符号数字和无符号数字。
这篇文章揭示了这样一个事实:.NET库和函数需要使用有符号整数而不是无符号整数,这样它们就可以在不提供显式无符号类型的语言中保持可移植性。
这篇文章更详细地介绍了为什么C#选择使用有符号整数,因为无符号整数不符合CLS。点击此处了解更多信息。
如果没有具体应用程序的全貌(以及字节交换的必要性),很难判断您在这里所做的是否真的有问题。