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