将IP地址转换并显示为二进制格式?

时间:2009-10-01 18:10:21

标签: c#

c#中有一个方法可以说出ip地址10.13.216.41

并将其显示为00001010.00001101.11011000.00101001。如果没有,怎么办呢?

6 个答案:

答案 0 :(得分:8)

虽然我不会重写格式二进制代码(Larsenal的答案很好),但我会指出分裂为“。”不适用于IPv6地址。但是,如果您使用IPAddress.Parse,它将适用于任何地址格式。然后,您可以使用IPAddress.GetAddressBytes获取地址的每个部分。

所以而不是:

input.Split('.').Select( ... )

做的:

IPAddress.Parse(input).GetAddressBytes().Select( ... )

答案 1 :(得分:7)

static string IPAddrToBinary( string input) {
   // assumes a valid IP Address format
   return String.Join(".", (input.Split('.').Select(x => Convert.ToString(Int32.Parse(x), 2).PadLeft(8, '0'))).ToArray());
}

这是一个带注释的版本,可能更容易理解 little

static string IPAddrToBinary(string input)
{
    return String.Join(".", ( // join segments
        input.Split('.').Select( // split segments into a string[]

            // take each element of array, name it "x",
            //   and return binary format string
            x => Convert.ToString(Int32.Parse(x), 2).PadLeft(8, '0')

        // convert the IEnumerable<string> to string[],
        // which is 2nd parameter of String.Join
        )).ToArray());
}

答案 2 :(得分:0)

首先,您需要获取要转换为二进制的数字(例如,使用String.Split)。然后,您可以使用Convert.ToString方法的重载来返回指定基数中指定数字的字符串。例如:

Convert.ToString (128, 2);

返回

10000000

答案 3 :(得分:0)

好笑,我今天为another question写了一个javascript版本。

这是该代码的c#翻译:

int dottedQuadToInt(string ip)
{      
    var parts = ip.Split(new char[] {'.'}, 4);
    if (parts.Length != 4) return -1;

    var result = 0; 
    var bitPos = 1;

    foreach(var part in parts)
    {
       //validation
       if (part.Length == 0 || part.Length > 3) return -1;

       int segment;
       if (!int.TryParse(part, out segment) || segment<0 || segment > 255) return -1;

       //compute next segment
       result += bitPos * segment;
       bitPos  = bitPos  << 8;
    }
    return result;
}

现在,这并不是你要求的,但它可以说更有用,它可以指出你正确的方向。

答案 4 :(得分:0)

你可以这样做:

var parts = (from p in ("10.13.216.41").Split('.')
              select int.Parse(p)).ToArray();
string result = string.Format("{0}.{1}.{2}.{3}",
    Convert.ToString(part[0], 2).PadLeft(8,'0'),
    Convert.ToString(part[1], 2).PadLeft(8,'0'),
    Convert.ToString(part[2], 2).PadLeft(8,'0'),
    Convert.ToString(part[3], 2).PadLeft(8,'0'));

答案 5 :(得分:0)

此方法可以帮助您:

static string IPDecToBinary(string IPAdresa)
{
    string IPverBinare = null;
    IPAddress IPDec = IPAddress.Parse(IPAdresa);
    byte[] IPByte = IPDec.GetAddressBytes();

    IPverBinare = string.Format("{0}.{1}.{2}.{3}",
                                 Convert.ToString(IPByte[0], 2).PadLeft(8, '0'),
                                 Convert.ToString(IPByte[1], 2).PadLeft(8, '0'),
                                 Convert.ToString(IPByte[2], 2).PadLeft(8, '0'),
                                 Convert.ToString(IPByte[3], 2).PadLeft(8, '0')
                                 );
    return IPverBinare;
}