我想将ipv4和ipv6地址转换为二进制并返回字符串。
例如192.168.1.1到11000000.10101000.00000001.00000001以及11000000.10101000.00000001.00000001到192.168.1.1
我发现这篇文章:link1但它只适用于ipv4。
我也找到了这个:link2所以我试过这个:
IPAddress ip = IPAddress.Parse("192.168.1.1");
textBox1.Text = ip.GetAddressBytes().ToString();
但它在文本框中显示System.Byte []。
长话短说我想使用在ipv4和ipv6中都能运行的稳定转换方法。(一个dll可能很棒。)
谢谢。答案 0 :(得分:2)
转换为二进制文件:
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
答案 1 :(得分:1)
IPAddress ip = IPAddress.Parse("192.168.1.1");
textbox1.Text = ip.GetAddressBytes().Select(x => x.ToString()).Aggregate((x,y) => x + y);
这是你想要的吗?
答案 2 :(得分:1)
这是您的解决方案: 制作两个功能,使其保持通用,您也可以进一步使用 此方法用于将字符串转换为二进制文件:
public static string StringToBinary(string ip) {
StringBuilder sb = new StringBuilder();
foreach(ip.ToCharArray()中的charc) {
sb.Append(Convert.ToString(c,2).PadLeft(8,' 0'));
}
返回sb.ToString();
}
此方法用于将二进制转换为字符串:
公共静态字符串BinaryToString(string ip) {
列出byteList = new List();
for(int i = 0; i< ip.Length; i + = 8) {
byteList.Add(Convert.ToByte(ip.Substring(i,8),2));
}
返回Encoding.ASCII.GetString(byteList.ToArray());
}
现在使用它,
IPAddress ip = IPAddress.Parse(" 192.168.1.1");
//到二进制
textBox1.Text = StringToBinary(ip.GetAddressBytes()。ToString());
//收件人
textBox1.Text = BinaryToString(ip.GetAddressBytes()。ToString());