1

两种方法IPAddress(Int64)都使用签名类型Int32 HostToNetworkOrder(Int32)System.Net.IPAddressIP 地址。

这使得有必要在将结果HostToNetworkOrder用作构造函数的参数时将结果强制转换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 地址没有任何签名概念,使用签名类型有什么意义吗?似乎只使用无符号类型会简单得多。

选择签名类型有什么具体原因吗?

4

1 回答 1

2

在这种情况下,选择有符号而不是无符号似乎是因为某些平台如何处理有符号和无符号数字。

这篇文章阐明了 .NET 库和函数需要使用有符号整数而不是无符号整数的事实,以便它们可以保持与不提供显式无符号类型的语言的可移植性。

这篇文章详细介绍了为什么 C# 选择使用有符号整数,因为无符号整数不符合 CLS。在此处阅读更多相关信息。

如果不全面了解您的特定应用程序(以及字节交换的需要),很难判断您在这里所做的事情是否真的有问题。

于 2014-10-25T01:35:12.827 回答