如何在C#中将IPv4地址转换为整数?

118
我正在寻找一个函数,可以将标准IPv4地址转换为整数。如果函数能够实现反向转换,则可获得额外积分。解决方案应使用C#编写。

18
警告:接受的答案所产生的整数将是“错误”的,因为IP地址是按网络字节序(大端序)排列的,而大多数系统中的int是小端序。因此,在转换之前必须颠倒字节顺序。请参见我的答案以获取正确的转换方式。即使对于IPv4,一个int也无法容纳大于127.255.255.255的地址,例如广播地址,因此请使用uint - Saeb Amini
@SaebAmini我的答案使用NetworkToHostOrder来反转字节。且int可以包含大于127.255.255.255的地址;它们以负数形式存储。当将类型转换为int时,Address属性中大于2^31的数字,即long类型,会变成负数;将其转换为int是为了调用NetworkToHostOrder,并且不会截断数字。 - Barry Kelly
22个回答

-1
我注意到 System.Net.IPAddress 有 Address 属性 (System.Int64) 和构造函数,也接受 Int64 数据类型。因此,您可以使用它将 IP 地址转换为数字格式(虽然不是 Int32,但是是 Int64)。

这应该是一条注释,因为它并没有回答问题! - Ian
你应该删除这个答案,因为尽管Address 看起来像是按照你说的那样工作,但实际上它并不是,结果是特定于地址族的。 - Luke Briner

-1

看一下 .Net 的 IPAddress.Parse 中一些疯狂的解析示例: (MSDN)

"65536" ==> 0.0.255.255
"20.2" ==> 20.0.0.2
"20.65535" ==> 20.0.255.255
"128.1.2" ==> 128.1.0.2


这并不是一个真正的答案。为什么不把它作为评论放在顶部答案之一呢? - DanM7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接