【问题标题】:What is the inet_addr function equivalent in C#C#中等价的inet_addr函数是什么
【发布时间】:2010-05-17 16:23:43
【问题描述】:

我需要知道如何使用像 inet_addr("192.168.0.2"); 这样的 IP 地址在 C++ 中 这将返回 DWORD。我在 C# 中的包装器将此字段视为 Int?

谁能帮助解决这个误解?

【问题讨论】:

  • 你到底想做什么? C# 已经对整个 IP 堆栈进行了封装——您不需要 P/Invoking 那些。
  • 我在 C++ 库中有一个包装器,我只是阅读了使用该库的文档,但示例是 C++ 代码,在某些地方我不太了解。这是在将 IP 地址设置为我的包装器作为 int 字段的 DWORD 类型字段时进行的。所以我想知道如何转换 IP 地址字符串(等“192.168.0.2”)并将其设置为 int 字段。
  • 如果您向我们展示了 C++ 代码和卡住的 C# 代码,这可能会对您的问题有所帮助。

标签: c++ c#-3.0 types wrapper


【解决方案1】:

您应该使用 IPAddress 类。它会让你有点麻烦,因为它试图阻止你依赖 IP4 地址。 Address 成员被声明为过时的。这是解决方法:

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

请注意,地址是正确的网络顺序(大端)。

【讨论】:

  • 看起来这样就可以了。谢谢
【解决方案2】:

好吧,如果它是.net,我假设它是一个小端机器,所以你“可以”按如下方式进行:

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

我很确定这是正确的方法:)

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多