Java 找出给定的mac地址是否在范围内

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实例,并对它们进行比较

我想知道给定的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
实例,并对它们进行比较

要创建
biginger
s,我们将把MAC地址看作数字的十六进制表示形式

以下实现并不关心:

  • 十六进制数字的“大小写”(适用于小写、大写、混合)
  • MAC地址中是否有破折号
    '-'
    分隔符
Java代码:

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()
每次比较之前。