Java 找出给定的mac地址是否在范围内
我想知道给定的mac地址是否在指定的mac地址范围内 例如,我定义了开始和结束地址。如果在此范围内提供任何mac地址,则API必须返回true或false 例如:70-71-BC-90-0D-01在范围内,而70-71-BC-90-0D-FF不在范围内Java 找出给定的mac地址是否在范围内,java,mac-address,Java,Mac Address,我想知道给定的mac地址是否在指定的mac地址范围内 例如,我定义了开始和结束地址。如果在此范围内提供任何mac地址,则API必须返回true或false 例如:70-71-BC-90-0D-01在范围内,而70-71-BC-90-0D-FF不在范围内 Begin address: 70-71-BC-90-00-00 End address : 70-71-BC-90-0D-F7 感谢对范围的完全通用性(而不仅仅是对这个特定范围的回答),您可以创建biginger实例,并对它们进行比较
Begin address: 70-71-BC-90-00-00
End address : 70-71-BC-90-0D-F7
感谢对范围的完全通用性(而不仅仅是对这个特定范围的回答),您可以创建
biginger
实例,并对它们进行比较
要创建biginger
s,我们将把MAC地址看作数字的十六进制表示形式
以下实现并不关心:
- 十六进制数字的“大小写”(适用于小写、大写、混合)
- MAC地址中是否有破折号
分隔符'-'
BigInteger min = new BigInteger(minAddr.replace("-",""), 16);
BigInteger max = new BigInteger(maxAddr.replace("-",""), 16);
BigInteger test = new BigInteger(testAddr.replace("-",""), 16);
boolean isInRange = min.compareTo(test) <= 0 && max.compareTo(test) >= 0;
BigInteger最小值=新的BigInteger(minAddr.replace(“-”,”),16);
BigInteger max=新的BigInteger(maxAddr.replace(“-”,”),16);
BigInteger测试=新的BigInteger(TestAddress.replace(“-”,”),16);
布尔值isInRange=min.compareTo(test)=0;
如果需要检查多个MAC地址,显然可以缓存min
和max
biginger
s.由于0-9个字符“小于”A-Z个字符,并且所有输入长度相同,只需使用字符串比较:
String beginAddress = "70-71-BC-90-00-00";
String endAddress = "70-71-BC-90-0D-F7";
if (macAddress.compareToIgnoreCase(beginAddress) >= 0
&& macAddress.compareToIgnoreCase(endAddress) <= 0)
// in range
String beginadress=“70-71-BC-90-00-00”;
字符串endAddress=“70-71-BC-90-0D-F7”;
if(macAddress.compareToIgnoreCase(beginAddress)>=0
&&macAddress.compareToIgnoreCase(endAddress)具体问题是什么?看起来像一组简单的数字比较,不是吗?应该在beginAddress
中添加toUpper()
,endAddress
和macAddress
使用compareToIgnoreCase(String)
比放置toUpperCase()
每次比较之前。