将IP转换为二进制并转换回字符串

本文关键字:转换 字符串 IP 二进制 | 更新日期: 2023-09-27 18:05:12

我想将ipv4和ipv6地址都转换为二进制地址,然后再转换回字符串。

例如192.168.1.1到1100000.010101000.000000001.00000001,以及1100000.0101010000.000000001.0000001到192.168.1.1

我发现了这个帖子:link1,但它只适用于ipv4。

我也发现了这个:链接2,所以我尝试了这个:

IPAddress ip = IPAddress.Parse("192.168.1.1");
textBox1.Text = ip.GetAddressBytes().ToString();

但它在文本框中显示System.Byte[]。

长话短说,我想使用在ipv4和ipv6中都能工作的稳定转换方法。(dll可能很棒。(

谢谢。

将IP转换为二进制并转换回字符串

转换为二进制:

var address = IPAddress.Parse("192.168.1.1");
var bytes = address
    .GetAddressBytes()
    .Select(number => Convert.ToString(number, 2).PadLeft(8, '0'));
var binaryAddress = string.Join(".", bytes);
// => 11000000.10101000.00000001.00000001

并转换回:

var bytes = binaryAddress
    .Split('.')
    .Select(@byte => Convert.ToInt32(@byte, 2));
var address = IPAddress.Parse(string.Join(".", bytes));
// => 192.168.1.1
IPAddress ip = IPAddress.Parse("192.168.1.1");
textbox1.Text = ip.GetAddressBytes().Select(x => x.ToString()).Aggregate((x,y) => x + y);

这是你想要的吗?

以下是您的解决方案:制作两个函数,使其保持通用性,以便您也可以进一步使用此方法用于将字符串转换为二进制:

公共静态字符串StringToBinary(字符串ip(

StringBuilder sb=new StringBuilder((;

foreach(ip.ToCharArray((中的字符c({

sb.Append(Convert.ToString(c,2(.PadLeft(8,'0'((;

}

将某人返回到String((;

}

此方法用于将二进制转换为字符串:

公共静态字符串BinaryToString(字符串ip(

List byteList=new List((;

for(int i=0;i<ip.Length;i+=8({

byteList.Add(Convert.ToByte(ip.Substring(i,8(,2((;

}

return编码.ASCII.GetString(byteList.ToArray(((;

}

现在使用它,

IPAddress-ip=IPAddress.Passe("192.168.1.1"(

//到二进制

textBox1.Text=StringToBinary(ip.GetAddressBytes((.ToString(((

//到字符串

textBox1.Text=BinaryToString(ip.GetAddressBytes((.ToString(((