将字符串转换为IP地址格式

5

我从数据库中以int格式读取IP地址数字,但我想以IP格式显示它们,例如000.000.000.000。

使用String.Format方法可以实现吗?

例如:

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

你使用的是什么语言?你的ips是一个整数数组还是一个大数字?请给出ips的示例。 - Joe
5个回答

13

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

IPAddress ip = IPAddress.Parse(IPStringHere);

然后在该对象上使用 "ToString()" 方法:

string outputString = ip.ToString();

您可以使用整数和句点来获取以所需格式显示的IP地址字符串。

IPAddress解析过程将接受一个字符串IP地址,也接受int / long int格式地址,使您能够解析两种格式。

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


你知道答案与问题无关,对吧?我知道已经晚了4年,但这仍然不是问题的答案。 - prof1990
因为这样做只是将一个字符串转换为IP地址结构,而OP明确要求以字符串格式输出以显示IP地址(这正是我通过谷歌最终来到这里的原因),所以我不赞成此回答。 - shawty
取消了踩,我改了问题。 - shawty

2

这些是代表整个IP地址的32位整数吗?如果是的话...

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

我不知道为什么那个构造函数需要很长时间,如果超出UInt32的范围,它会抛出异常,所以在我看来使用UInt32更合适。


2
在.NET中,使用Usomething(或它们的别名usomething,如uint)类型是不被赞同的。这不符合CLS标准,因为有些语言不区分有符号和无符号(通常只有有符号版本)。IPAddress是一个.NET框架类,因此必须与所有语言兼容,因此不能使用UInt32,而应该使用long - xanatos

2

我也在寻找同样的答案,但是既然没有,我就自己写了。

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格式表示的...算了,不确定你该怎么做....

0

像这样的吗?
.Net 4.0

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

早些时候

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

这段代码的意思是,将一个由IP地址组成的string[]数组以.为分隔符进行拼接。在此之前,需要使用ToString()方法将每个IP地址转换为字符串,并使用ToArray()方法将它们转换为string[]数组。


1
在C# 4.0中,他们添加了一个IEnumerable版本的join,因此您可以删除“ToArray()”。 - xanatos
好的!我会更新两个版本,OP没有指定使用哪个 .NET 版本。 - Joe

0

如果是数组:

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

但我需要在查询输出的单个返回值(nvarchar类型)中添加点,例如111111111111. - Noname
你的ips是什么类型?它是一个int数组,还是一个字符串或其他类型? - xanatos
我在那里没有使用任何数组,只是从读取器中读取数据,例如 string ips = dr["block_ip"].ToString(); string str = String.Format("{0:#,###,###.##}",ips); - Noname
1
如果你的字符串没有被格式化,那么它是不可能被分割的。我怎么知道 11111 是 1.1.1.11 还是 1.1.11.1?而在你将 dr["block_ip"] ToString() 之前它是什么? - xanatos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接