繁体   English   中英

为什么System.Net.IPAddress使用签名类型?

[英]Why does System.Net.IPAddress use signed types?

方法IPAddress(Int64)Int32 HostToNetworkOrder(Int32)System.Net.IPAddress两种用途的IP地址符号类型。

这使得有必要将HostToNetworkOrder的结果用作IPAddress构造函数的参数时,将其HostToNetworkOrder为以下代码:

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

如果网络顺序值不是未签名的,则诸如192.168.0.255的地址将导致ArgumentOutOfRangeException。 这可能是因为IPAddress(Int64)不接受大于0x00000000FFFFFFFF的值,但从Int32转换时(net-order)192.168.0.255的Int64表示形式是0xffffffffffff00a8c0吗?

即使IP地址没有任何签名概念,使用签名类型也有什么意义吗? 似乎只使用无符号类型会更简单。

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

在这种情况下,选择使用签署无符号数似乎是因为某些平台如何处理有符号数与无符号数。

这篇文章揭示了一个事实,即.NET库和函数需要在无符号的基础上使用有符号的整数,以便它们可以使用不提供显式无符号类型的语言来保持可移植性。

这篇文章详细介绍了C#为什么选择使用带符号整数的原因,因为无符号整数不符合CLS。 在这里阅读更多有关它的内容。

没有您的特定应用程序的全貌(以及对字节交换的需求),很难分辨您在这里所做的操作是否确实有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM