本文实例讲述了Java编程实现遍历两个MAC地址之间所有MAC的方法。分享给大家供大家参考,具体如下:
在对发放的设备进行后台管理时,很多时候会用到设备MAC这个字段,它可以标识唯一一个设备。然而在数据库批量的存储MAC地址时,如果使用解析文本逐行添加的方式,难免会显得操作复杂,而且事先还需生成MAC地址文本。事实上MAC地址是按照十六进制逐一递增的,所以只需要给出一个区间便有可能枚举出所有MAC地址。以下是笔者封装的一个通过两个MAC地址枚举区间内所有MAC的函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/** 输出两个MAC区间内的所有MAC地址 */
public static void countBetweenMac(String macStart, String macEnd){
long start = turnMacToLong(macStart);
long end = turnMacToLong(macEnd);
String prefix = macStart.substring( 0 , 9 );
String hex = null ;
String suffix = null ;
StringBuffer sb = null ;
for ( long i=start; i< end + 1 ; i++){
hex = Long.toHexString(i);
suffix = hex.substring(hex.length()- 6 );
sb = new StringBuffer(suffix);
sb.insert( 2 , ":" );
sb.insert( 5 , ":" );
System.out.println(prefix + sb.toString());
}
}
/** 将MAC转换成数字 */
public static long turnMacToLong(String MAC){
String hex = MAC.replaceAll( "\\:" , "" );
long longMac = Long.parseLong(hex, 16 );
return longMac;
}
|
另附计算两个MAC之间MAC中个数函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/** 计算区间内MAC总数 */
public static long countMac1(String macStart, String macEnd){
String hexStart = macStart.replaceAll( "\\:" , "" );
String hexEnd = macEnd.replaceAll( "\\:" , "" );
long start = Long.parseLong(hexStart, 16 );
long end = Long.parseLong(hexEnd, 16 );
return end-start+ 1 ;
}
/** 计算区间内MAC总数 */
public static long countMac(String macStart, String macEnd){
String[] start = macStart.split( "\\:" );
String[] end = macEnd.split( "\\:" );
int x,y,z;
int a,b,c;
x = Integer.parseInt(start[ 3 ], 16 );
y = Integer.parseInt(start[ 4 ], 16 );
z = Integer.parseInt(start[ 5 ], 16 );
a = Integer.parseInt(end[ 3 ], 16 );
b = Integer.parseInt(end[ 4 ], 16 );
c = Integer.parseInt(end[ 5 ], 16 );
return (a-x)* 16 * 16 * 16 + (b-y)* 16 * 16 + c-z+ 1 ;
}
|
希望本文所述对大家Java程序设计有所帮助。