【发布时间】:2017-07-28 20:20:53
【问题描述】:
我正在尝试制作一个小程序,我可以在其中输入 IPv4 地址和 SubMask 地址。
工作正常...
然后我会做一个 AND,所以我可以看到 IPv4 地址来自哪个子网络,以(二进制形式)... 我不能让它工作,有人可以帮忙..
这里我试图将按位字符串转换为 Int,所以我可以进行和 AND,但是我的变量 iSIDs 和 iSIDr(int 数据类型)没有得到值..
变量子结果和结果是 32 位二进制形式的十进制 IPv4 转换地址,因此 BitWise 字符串...
string SIDsubresult = subresult;
SIDsubresult = SIDsubresult.Replace(".", "");
string SIDresult = result;
SIDresult = SIDresult.Replace(".", "");
int iSIDs = Convert.ToInt32(SIDsubresult);
int iSIDr = Convert.ToInt32(SIDresult);
Console.Write(iSIDr & iSIDs);
编辑/更新
在我开始编写代码之前,所有人都有代码.. 我之前的代码和代码在这里
var split = (from p in ipv4add.Split('.') select int.Parse(p)).ToArray();
string result = string.Format("{0}.{1}.{2}.{3}",
Convert.ToString(split[0], 2).PadLeft(8, '0'),
Convert.ToString(split[1], 2).PadLeft(8, '0'),
Convert.ToString(split[2], 2).PadLeft(8, '0'),
Convert.ToString(split[3], 2).PadLeft(8, '0'));
var subsplit = (from s in subnetmaske.Split('.') select int.Parse(s)).ToArray();
string subresult = string.Format("{0}.{1}.{2}.{3}",
Convert.ToString(subsplit[0], 2).PadLeft(8, '0'),
Convert.ToString(subsplit[1], 2).PadLeft(8, '0'),
Convert.ToString(subsplit[2], 2).PadLeft(8, '0'),
Convert.ToString(subsplit[3], 2).PadLeft(8, '0'));
string SIDsubresult = subresult;
SIDsubresult = SIDsubresult.Replace(".", "");
string SIDresult = result;
SIDresult = SIDresult.Replace(".", "");
int iSIDs = Convert.ToInt32(SIDsubresult);
int iSIDr = Convert.ToInt32(SIDresult);
Console.Write(iSIDr & iSIDs);
【问题讨论】:
-
通过解析不带句点将 IPv4 地址转换为 int 是非常错误的并且通常会溢出
-
查看例如stackoverflow.com/questions/1499269/…,了解如何检查子网的 IP
-
使用 uint 而不是 int。 IPV4 最大值可以是 0xFFFFFFFF,这会溢出 int,但不会溢出 uint。
标签: c# bitwise-and