2010-05-17 81 views
2

相当于inet_addr函数我需要知道如何使用IP地址,如inet_addr(“192.168.0.2”);在C++ 这里返回DWORD。我在C#中的包装将此字段视为Int?什么是在C#

任何人都可以帮助解决这个误解吗?

+0

你想要做什么? C#已经在整个IP堆栈中包含了包装 - 你不应该需要P /调用这些包。 – 2010-05-17 16:34:57

+0

我在C++库中有一个包装器,我只是阅读文档以使用这个库,但是这些示例是用C++代码编写的,我在某些地方对此不太了解。在此处设置IP地址为DWORD类型字段,其中我的包装具有int字段。所以我想知道如何转换IP地址字符串(等“192.168.0.2”)并将其设置为int字段。 – 2010-05-17 17:06:40

+0

如果您向我们展示了C++代码和C#代码,则可能会帮助您解决问题。 – 2010-05-17 17:22:18

回答

4

你应该使用IPAddress类。它会让你感到困扰,因为它试图阻止你依赖IP4地址。地址成员声明已过时。下面是解决方法:

using System; 
using System.Net; 

class Program { 
    static void Main(string[] args) { 
     var addr = IPAddress.Parse("192.168.0.2"); 
     int ip4 = BitConverter.ToInt32((addr.GetAddressBytes()), 0); 
     Console.WriteLine("{0:X8}", ip4); 
     Console.ReadLine(); 
    } 
} 

输出:0200A8C0

注意,地址是正确的网络顺序(big endian)的。

+0

看起来像这样做的工作。感谢名单 – 2010-05-17 18:54:39

0

好吧,如果我.NET承担其小端机所以你也“可能”做到这一点:

address = (192 << 0) | (168 << 8) | (0 << 16) | (2 << 24); 

我敢肯定,这就是一轮以正确的方式:)