【问题标题】:How can I map an IP Address to an eight character long string?如何将 IP 地址映射到八字符长的字符串?
【发布时间】:2012-02-17 21:04:49
【问题描述】:

我有一个服务器 IP 地址列表,我的应用程序与之交互以收集实时数据。收集到的数据被发送到另一个系统中的插槽。这些插槽由八个字符长度的字符串标识。我想以编程方式创建这个插槽。我想创建一个将服务器的 IP 地址映射到八个字符串的方法。例如。给定 192.80.24.200 它将返回 SLOT0001 我认为散列函数将是一个很好的解决方案,但我不确定它是如何实现的。

该应用程序是 C# Winforms .Net Framework 4.0。服务器是基于 Windows 的服务器。

【问题讨论】:

  • 您想混淆 IP 还是将字符串反转为原始 IP 是否可以接受?
  • 我更喜欢一种会混淆的解决方案,但允许从字符串中找出 IP 的解决方案是可以接受的。
  • 您的解决方案是否需要支持 IPv6 地址?
  • @ScottSmith 好问题。目前我们只关心定位 IPv4 地址。

标签: c# .net algorithm hash hashtable


【解决方案1】:

好吧,将 IP 地址转换为 32 位数字,然后将其转换为 8 个十六进制数字。

【讨论】:

    【解决方案2】:

    一个IP地址长4个字节,可以直接写成8个16进制字符:

    void Main()
    {
        var addr = IPAddress.Parse("192.80.24.200");
        var str = IPAddressToString(addr);
        Console.WriteLine(str);
    }
    
    public string IPAddressToString(IPAddress address)
    {
        var result = new StringBuilder(8);
        foreach(var b in address.GetAddressBytes())
        {
            result.AppendFormat("{0:x2}", b);
        }
        return result.ToString();
    }
    

    【讨论】:

      【解决方案3】:

      八个字符是十六进制表示。

      • 十进制:192.80.24.200
      • 十六进制:C0.50.18.C8
      • 无点十六进制字符串:C05018C8

      这是将 IP 打包成 8 个字节的更快、更简单的方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-21
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 2013-07-09
        • 1970-01-01
        • 2023-03-10
        相关资源
        最近更新 更多