MAC地址处理工具类

本文介绍了如何使用Java实现10进制与16进制之间的转换,包括IntToHex方法、HexToInt方法,以及针对Mac地址的加法和减法操作。同时涉及了字符转16进制值、幂运算和Mac地址格式验证功能。
摘要由CSDN通过智能技术生成
import java.util.Locale;
import java.util.regex.Pattern;

public class BinaryUtil {

    public static final String TRANSVERSE= "-";

    //10进制转16进制
    public static String IntToHex(int n){
        char[] ch = new char[20];
        int nIndex = 0;
        while ( true ){
            int m = n/16;
            int k = n%16;
            if ( k == 15 )
                ch[nIndex] = 'F';
            else if ( k == 14 )
                ch[nIndex] = 'E';
            else if ( k == 13 )
                ch[nIndex] = 'D';
            else if ( k == 12 )
                ch[nIndex] = 'C';
            else if ( k == 11 )
                ch[nIndex] = 'B';
            else if ( k == 10 )
                ch[nIndex] = 'A';
            else
                ch[nIndex] = (char)('0' + k);
            nIndex++;
            if ( m == 0 )
                break;
            n = m;
        }
        StringBuffer sb = new StringBuffer();
        sb.append(ch, 0, nIndex);
        sb.reverse();
        String strHex = new String("0x");
        strHex += sb.toString();
        return strHex;
    }
    
    //16进制转10进制
    public static int HexToInt(String strHex){
        int nResult = 0;
        if ( !IsHex(strHex) )
            return nResult;
        String str = strHex.toUpperCase();
        if ( str.length() > 2 ){
            if ( str.charAt(0) == '0' && str.charAt(1) == 'X' ){
                str = str.substring(2);
            }
        }
        int nLen = str.length();
        for ( int i=0; i<nLen; ++i ){
            char ch = str.charAt(nLen-i-1);
            try {
                nResult += (GetHex(ch)*GetPower(16, i));
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return nResult;
    }
    
    //计算16进制对应的数值
    public static int GetHex(char ch) throws Exception{
        if ( ch>='0' && ch<='9' )
            return (int)(ch-'0');
        if ( ch>='a' && ch<='f' )
            return (int)(ch-'a'+10);
        if ( ch>='A' && ch<='F' )
            return (int)(ch-'A'+10);
        throw new Exception("error param");
    }
    
    //计算幂
    public static int GetPower(int nValue, int nCount) throws Exception{
        if ( nCount <0 )
            throw new Exception("nCount can't small than 1!");
        if ( nCount == 0 )
            return 1;
        int nSum = 1;
        for ( int i=0; i<nCount; ++i ){
            nSum = nSum*nValue;
        }
        return nSum;
    }
    
    //判断是否是16进制数
    public static boolean IsHex(String strHex){
        int i = 0;
        if ( strHex.length() > 2 ){
            if ( strHex.charAt(0) == '0' && (strHex.charAt(1) == 'X' || strHex.charAt(1) == 'x') ){
                i = 2;
            }
        }
        for ( ; i<strHex.length(); ++i ){
            char ch = strHex.charAt(i);
            if ( (ch>='0' && ch<='9') || (ch>='A' && ch<='F') || (ch>='a' && ch<='f') )
                continue;
            return false;
        }
        return true;
    }
    
    /**
     * Mac加法
     * @author YOLANDA
     * @param mac Mac地址,eg:ABCDEF56BFD0
     * @param add 要加的数
     * @return
     *
     */

    public static String getMacAdd(String mac, long add) {
        return Long.toHexString(Long.parseLong(mac, 16) + add).toUpperCase(Locale.getDefault());
    }
    
    /**
     * Mac减法
     * @author YOLANDA
     * @param mac   Mac地址:eg:ABCDEF56BFD0
     * @param minus 要减的数
     * @return
     *
     */
     public static String getMacMinus(String mac, long minus) {
        String s = Long.toHexString(Long.parseLong(mac, 16) - minus).toUpperCase(Locale.getDefault());
       //不足 补0   例如 00 00 00 00 00 12
        if (s.length() < 12){
            StringBuilder stringBuilder = new StringBuilder();
			for (int i = 0 ;i< 12-s.length() ; i++ ){
                stringBuilder.append("0");
            }
            s = stringBuilder.toString()+s ;
        }
        return s;
     }
    
    /**
     * @param mac   "7000000000BD"
     * @param split "-"
     * @return "70-00-00-00-00-BD"
     */
     public static String macAppendSplit(String mac, String split) {
        int length = mac.length();
        StringBuffer buffer = new StringBuffer("");
        for (int i = 0; i < length; i++) {
            char charAt = mac.charAt(i);
            buffer.append(charAt);
            if (i % 2 != 0 && i != length - 1) {
                buffer.append(split);
            }
        }
        return buffer.toString();
    }
    
    /**
     *
     * @param mac "70-00-00-00-00-BD"
     * @param split "-"
     * @return 7000000000BD
     */
     public static String macRemoveSplit(String mac, String split) {
        String[] newMac = mac.split(split);
        StringBuffer buffer = new StringBuffer("");
        for (String s : newMac) {
            buffer.append(s);
        }
        return buffer.toString();
    }
    
    /**
     * 计算两个mac地址 之间有多少个
     * @param macStart  mac地址初始位置   70-00-00-00-00-00
     * @param macEnd  mac地址结束位置     70-00-00-00-00-09
     * @param split  分割                "-"
     * @return                          返回10个
     */
     public static long countMac(String macStart, String macEnd,String split){
        String hexStart = macStart.replaceAll(split, "");
        String hexEnd = macEnd.replaceAll(split, "");
        long start = Long.parseLong(hexStart, 16);
        long end = Long.parseLong(hexEnd, 16);
        return end-start+1;
    } 
    
    /**
     * 判断是否为mac地址  [a-fA-F0-9]匹配十六进制
     * @param mac      70-00-00-00-00-09
     * @param split    "-"
     * @return
     */    
     public static Boolean isMacAddress(String mac,String split) {
        String patternMac = "^[a-fA-F0-9]{2}"+split
                + "[a-fA-F0-9]{2}"+split
                + "[a-fA-F0-9]{2}"+split
                + "[a-fA-F0-9]{2}"+split
                + "[a-fA-F0-9]{2}"+split
                + "[a-fA-F0-9]{2}$";
        Pattern pa = Pattern.compile(patternMac);
        boolean isMac = pa.matcher(mac).find();
        return isMac;
    }
}
                
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android BLE(蓝牙低功耗)工具类是用于简化在Android应用中与蓝牙设备进行通信的开发过程的类。该工具类提供了一系列方法和功能,使得与BLE设备的连接、数据传输和操作变得更加简单和高效。 首先,该工具类提供了与BLE设备进行连接和断开连接的方法。通过调用连接方法,我们可以与目标BLE设备建立起稳定的连接,并获取一个用于后续通信的Gatt服务。同时,断开连接方法可以安全地中断与设备之间的通信,释放资源并确保连接关闭。 其次,该工具类还包含了搜索BLE设备的功能。我们可以使用这个功能来扫描附近的BLE设备,并获取它们的名称、MAC地址和其他相关信息。这可以帮助我们快速找到需要连接的设备,并进行下一步操作。 在连接建立后,该工具类还提供了读取、写入和监听BLE设备特征的方法。我们可以通过读取特征值来获取设备传输的数据,通过写入特征值来向设备发送指令,或者通过监听特征值的变化来实时获取设备的状态更新。这些方法使得与BLE设备的数据交互变得非常方便。 此外,该工具类还支持BLE设备的服务发现、特征值读写的状态回调以及连接状态的监听等功能。它提供了丰富的回调接口,使得我们可以根据需求进行相应的处理和操作。 总之,Android BLE工具类为开发人员提供了一系列简化蓝牙低功耗通信过程的方法和功能。它的使用可以大大减少开发工作的复杂性和难度,提高开发效率,并帮助我们更好地实现与BLE设备的交互。 ### 回答2: Android BLE工具类是一种用于简化与BLE(蓝牙低功耗)设备通信的工具类。它提供了一系列便捷的方法和功能,使开发者能够更容易地实现BLE设备的连接、搜索、数据传输等操作。 首先,Android BLE工具类可以帮助开发者建立与BLE设备的连接。它封装了与设备的GATT(通用属性)连接过程,使连接操作更加简单和高效。通过调用相应的方法,开发者可以轻松地与设备进行连接,并可以处理连接成功或失败的回调。 其次,该工具类还提供了BLE设备搜索的功能。开发者可以使用相应的方法启动BLE设备搜索,并可以设置搜索的时间和过滤条件。搜索结果将以回调方式返回,开发者可以根据搜索结果选择要连接的设备。 此外,该工具类还封装了BLE设备的通信接口,使开发者能够方便地发送和接收数据。开发者可以使用相应的方法向设备发送命令或请求,并可以处理设备返回的数据。这些方法包括读取特征值、写入特征值、设置通知等。 最后,该工具类还提供了其他一些便捷的功能,如断开设备连接、设置连接超时、监测设备状态等。开发者可以根据自己的需求选择使用这些功能来提高开发效率和用户体验。 总之,Android BLE工具类是一种能够简化与BLE设备通信的工具,它提供了连接设备、搜索设备、数据传输等一系列功能,帮助开发者更方便地实现BLE设备的相关操作。 ### 回答3: Android BLE(Bluetooth Low Energy)工具类是一种在Android平台上使用的工具类,用于简化与蓝牙低功耗设备通信的操作。 Android BLE工具类的主要功能包括以下几个方面: 1. 初始化:Android BLE工具类提供初始化蓝牙适配器的功能,以及检查设备是否支持BLE功能。 2. 扫描设备:Android BLE工具类提供开始和停止扫描BLE设备的方法,并且可以根据设备的UUID或名称过滤扫描结果。 3. 连接设备:Android BLE工具类可以连接指定的BLE设备,并提供连接成功、连接失败、断开连接等回调方法,方便开发者处理连接状态。 4. 发现服务和特征值:Android BLE工具类支持发现BLE设备的服务和特征值,通过服务和特征值,开发者可以读取、写入及监听BLE设备的数据。 5. 数据操作:Android BLE工具类可以进行BLE设备的数据读取、写入及监听操作,开发者可以根据实际需求进行相应的数据处理。 6. 错误处理:Android BLE工具类提供BLE操作过程中可能发生的错误处理方法,开发者可以根据错误码进行相应的处理,以增强应用的稳定性。 总的来说,Android BLE工具类简化了与BLE设备的通信操作,提供了易于使用的API接口,方便开发者快速开发与蓝牙低功耗设备的交互功能。但是对于复杂的BLE设备通信需求,可能需要根据实际情况自行进行定制和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值