当前位置:  开发笔记 > 编程语言 > 正文

如何在C#中将IP地址字符串解析为uint值?

如何解决《如何在C#中将IP地址字符串解析为uint值?》经验,为你挑选了4个好方法。

我正在编写使用Windows IP Helper API的C#代码.我试图调用的函数之一是" GetBestInterface ",它采用IP的"uint"表示.我需要的是解析IP的文本表示以创建'uint'表示.

我已经通过谷歌找到了一些例子,比如这个或者这个例子,但我很确定应该有一种标准的方法来实现这一点.唯一的问题是,我找不到这种标准方式.IPAddress.Parse似乎是在正确的方向,但它没有提供任何方式获得'uint'表示...

还有一种方法可以使用IP Helper,使用ParseNetworkString,但同样,我宁愿使用.NET - 我相信我越少依赖pInvoke就越好.

那么,有谁知道在.NET中执行此操作的标准方法?



1> 小智..:

不应该是:

var ipAddress = IPAddress.Parse("some.ip.address");
var ipBytes = ipAddress.GetAddressBytes();
var ip = (uint)ipBytes [0] << 24;
ip += (uint)ipBytes [1] << 16;
ip += (uint)ipBytes [2] <<8;
ip += (uint)ipBytes [3];



2> aku..:

MSDN 说 IPAddress.Address属性(返回IP地址的数字表示)已过时,您应该使用GetAddressBytes方法.

您可以使用以下代码将IP地址转换为数值:

var ipAddress = IPAddress.Parse("some.ip.address");
var ipBytes = ipAddress.GetAddressBytes();
var ip = (uint)ipBytes [3] << 24;
ip += (uint)ipBytes [2] << 16;
ip += (uint)ipBytes [1] <<8;
ip += (uint)ipBytes [0];

编辑:
正如其他评论者注意到上述代码仅适用于IPv4地址.IPv6地址长度为128位,因此不可能像问题的作者那样将其转换为"uint".


你确定四个指数的顺序吗?在我看来,索引为0的字节应该移位24位而不是索引为3的字节.

3> nimish..:
var ipuint32 = BitConverter.ToUInt32(IPAddress.Parse("some.ip.address.ipv4").GetAddressBytes(), 0);`

该解决方案比手动位移更容易阅读.

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



4> Corin Blaiki..:

您还应该记住IPv4和IPv6的长度不同.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有