C# System.Net.IPAddress为什么使用签名类型?
C# System.Net.IPAddress为什么使用签名类型?,c#,.net,network-programming,signedness,C#,.net,Network Programming,Signedness,System.Net中的IPAddress(Int64)和Int32 HostToNetworkOrder(Int32)方法。IPAddress都对IP地址使用签名类型 这使得在将结果用作IPAddress构造函数的参数时,有必要从HostToNetworkOrder强制转换结果,从而产生如下代码: UInt32 netOrderU32 = (UInt32)IPAddress.HostToNetworkOrder((Int32)ipVal); IP
System.Net中的IPAddress(Int64)
和Int32 HostToNetworkOrder(Int32)
方法。IPAddress
都对IP地址使用签名类型
这使得在将结果用作IPAddress
构造函数的参数时,有必要从HostToNetworkOrder
强制转换结果,从而产生如下代码:
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。 阅读更多关于这方面的内容
如果没有特定应用程序的全貌(以及字节交换的需要),很难判断您在这里所做的事情是否确实有问题。简单地说,未签名类型不是
CLSCompliant