c#中有一个方法可以说出ip地址10.13.216.41
并将其显示为00001010.00001101.11011000.00101001。如果没有,怎么办呢?
答案 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;
}