Java字节转换工具类,Android蓝牙转码

开发中用到的字节工具类,对蓝牙的传输数据进行求和等。。。

public class ByteUtil {
    /**
     * 字节转十六进制 为相应的字符串显示
     */
    public static String byte2Hex(byte data[]) {
        if (data != null && data.length > 0) {
            StringBuilder sb = new StringBuilder(data.length);
            for (byte tmp : data) {
                sb.append(String.format("%02X", tmp));
            }
            return sb.toString();
        }
        return "no data";
    }

    /**
     * byte数组转十六进制 为相应的字符串显示
     */
    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }

    /**
     * byte数组的16进制累加和
     */
    public static byte[] bytesGetSum(byte[] src) {
        int total = 0;
        int len = src.length;
        byte[] des = new byte[len + 1];
        if (src == null || len <= 0) {
            des[len] = (byte) Integer.parseInt("ff", 16);
            return des;
        }
        for (int i = 0; i < len; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            total += Integer.parseInt(hv, 16);
            des[i] = (byte) Integer.parseInt(hv, 16);
        }
        /**
         * 用256求余最大是255,即16进制的FF
         */
        int mod = total % 256;
        String hex = Integer.toHexString(mod);
        // 如果不够校验位的长度,补0,这里用的是两位校验
        if (hex.length() < 2) {
            hex = "0" + hex;
        }
        des[len] = (byte) Integer.parseInt(hex, 16);
        return des;
    }

    /**
     * 字符串的16进制累加和
     */
    public static String stringGetSum(String data) {
        if (data == null || data.equals("")) {
            return "";
        }
        int total = 0;
        int len = data.length();
        int num = 0;
        while (num < len) {
            String s = data.substring(num, num + 2);
            total += Integer.parseInt(s, 16);
            num = num + 2;
        }
        /**
         * 用256求余最大是255,即16进制的FF
         */
        int mod = total % 256;
        String hex = Integer.toHexString(mod);
        len = hex.length();
        // 如果不够校验位的长度,补0,这里用的是两位校验
        if (len < 2) {
            hex = "0" + hex;
        }
        return hex;
    }

    /**
     * 获取步数
     */
    public static int makeStep(String data) {
        if (data == null || data.equals("")) {
            return 0;
        }
        int total = 0;
        int len = data.length();
        int num = 0;
        while (num < len) {
            String s = data.substring(num, num + 2);
            total += Integer.parseInt(s, 16);
            num = num + 2;
        }
        return total;
    }

    public static void main(String[] args) {
        System.out.println(bytesToHexString(bytesGetSum(new byte[]{(byte) 0xAA, (byte) 0xAA, 0x06, 0x01, 0x06})));
    }

}

Java字节转换工具类,Android蓝牙转码
https://blog.jeecloud.cn/2018/01/18/20180118092200/
作者
pshgao
发布于
2018年1月18日
许可协议