【问题标题】:converting IP to binarry and convert back to string将IP转换为二进制并转换回字符串
【发布时间】:2015-07-30 02:41:23
【问题描述】:

我想将 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 可能会更好。)

谢谢。

【问题讨论】:

  • textBox1.Text = string.Join(".", ip.GetAddressBytes().Select(b => Convert.ToString(b, 2).PadLeft(8, '0'))); 是做什么的?
  • 谢谢。但我认为它只适用于 ipv4。我怎样才能把它转换回来?
  • 不太清楚你要做什么,因为11000000.10101000.00000001.00000001 不是二进制的——它是一个包含 1、0 和 dots 的字符串。
  • 是的。我的意思是二进制字符串。我的错。对不起。
  • 您不能只在数组上调用ToString() 并期望出现默认值以外的其他内容。您需要将每个元素格式化为字符串并加入结果

标签: c#


【解决方案1】:

转换成二进制:

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

【讨论】:

  • 哎呀。我忘记了问题的第二部分。 2 秒。
  • 非常感谢。它工作得很好。但是如何将其转换回字符串?
  • @Dan 更新了我的答案。
【解决方案2】:
IPAddress ip = IPAddress.Parse("192.168.1.1");
textbox1.Text = ip.GetAddressBytes().Select(x => x.ToString()).Aggregate((x,y) => x + y);

这是你想要的吗?

【讨论】:

  • 谢谢。但输出是:19216811。它只是删除了点!
  • 为什么是Aggregate 而不是String.Join?聚合会无缘无故地创建很多临时字符串。此代码也不使用任何分隔符。您可以将 StringBuilder 对象传递给Aggregate,以便Append 格式化字符串
【解决方案3】:

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

公共静态字符串 StringToBinary(string ip) {

StringBuilder sb = new StringBuilder();

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

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

}

return sb.ToString();

}

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

公共静态字符串 BinaryToString(string ip) {

List byteList = new List();

for (int i = 0; i

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

}

return 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());

【讨论】:

    猜你喜欢
    • 2023-03-02
    • 1970-01-01
    • 2019-02-02
    • 2013-01-08
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多