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

在c#中是否有一个与IP地址10.13.216.41对话的方法

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

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

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

 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 to string[], // which is 2nd parameter of String.Join )).ToArray()); } 

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

所以代替:

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

做:

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

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

 Convert.ToString (128, 2); 

回报

 10000000 

好笑,我今天为另一个问题写了一个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; } 

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

你可以这样做:

 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')); 

这种方法可以帮助您:

 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; }