将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可能很棒。(
谢谢。
转换为二进制:
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(((