【问题标题】:Convert string to IP address format将字符串转换为 IP 地址格式
【发布时间】:2011-02-22 06:04:21
【问题描述】:

我正在以 int 格式从数据库中读取 IP 地址编号,但我想显示它们 IP 格式,如 000.000.000.000

是否可以使用 String.Format 方法?

例如:

string str = String.Format("{0:#,###,###.##}", ips); 

【问题讨论】:

  • 什么语言和什么是你的 ips 一个整数数组或一个大数字。举个ips的例子。

标签: c# string.format


【解决方案1】:

如果您使用 System.Net 命名空间中的 IPAddress 对象来解析您的地址,如下所示:

IPAddress ip = IPAddress.Parse(IPStringHere);

然后对该对象使用“ToString()”方法:

string outputString = ip.ToString();

您可以获得一个字符串,该字符串以您需要的格式使用整数和句号显示提供的 IP 地址。

IPAddress 解析例程将采用字符串 IP 地址,它还将采用 int/long int 格式地址,也允许您解析这两种格式。

如果您使用“TryParse”并将转换放在 if 块中,作为奖励,您还可以在返回字符串之前测试输入格式是否产生正确的 IP 地址,便于输入验证。

【讨论】:

  • 你知道答案与问题无关吧?我知道已经晚了 4 年,但这仍然不是问题的答案。
  • 投反对票,因为所有这些都是将字符串转换为 IP 地址结构,OP 明确要求输出字符串格式以显示 IP 地址(与我在这里结束的原因完全相同通过谷歌)
  • 删除了反对票,我改为编辑问题。
【解决方案2】:

这些 32 位整数是否分别代表整个 IP 地址?如果是这样……

IPAddress ip = new IPAddress((long)ips);
return ip.ToString();

(我不知道为什么构造函数需要很长时间,如果超出 UInt32 的范围,它会抛出异常,所以我认为 UInt32 会更合适。)

【讨论】:

  • 在 .NET 中使用 Usomething(或它们的别名 usomething,如 uint)类型是不受欢迎的。它不符合 CLS,因为某些语言不区分签名和未签名(通常只有签名版本)。 IPAddress 是一个 .NET 框架类,所以它必须兼容所有语言,所以不要 UInt32 和是 long
【解决方案3】:

我来寻找相同的答案..但看到没有我写我自己。

private string padIP(string ip)
{
    string output = string.Empty;
    string[] parts = ip.Split('.');
    for (int i = 0; i < parts.Length; i++)
    {
        output += parts[i].PadLeft(3, '0');
        if (i != parts.Length - 1)
            output += ".";
    }
    return output;
}

编辑:啊我看到 int 格式..没关系,不知道你会怎么做....

【讨论】:

    【解决方案4】:

    如果是数组:

    string str = String.Format("{0:###}.{1:###}.{2:###}.{3:###}", ips[0], ips[1], ips[2], ips[3]);
    

    【讨论】:

    • 但我需要在查询输出的单个返回(nvarchar 类型)中添加点,例如 111111111111 到
    • 你的ips是什么类型的?是int的数组,还是字符串之类的?
    • m 没有使用任何数组来从读取器中读取数据,例如 string ips = dr["block_ip"].ToString(); string str = String.Format("{0:#,###,###.##}",ips);
    • 如果您的字符串尚未格式化,则无法对其进行分割。我怎么知道 11111 是 1.1.1.11 还是 1.1.11.1?你 ToString() 之前的 dr["block_ip"] 是什么?
    【解决方案5】:

    类似的东西?
    .Net 4.0

    string str = string.Join(".", ips.Select(x => x.ToString()))
    

    之前

    string str = string.Join(".", ips.Select(x => x.ToString()).ToArray())
    

    这表示,加入string[]. 之间。该数组由ips组成,使用ToString()转换为字符串,使用ToArray()转换为字符串[]

    【讨论】:

    • 在 C# 4.0 中他们添加了一个 IEnumerable 版本的 join,因此您可以删除“ToArray()”。
    • 不错!我会用这两个版本更新,OP没有指定.net的哪个版本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2020-05-06
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2019-05-13
    • 2023-03-05
    相关资源
    最近更新 更多