Android 开发ble,研究string与byte的互转

开发ble,研究string与byte的互转

/**
 * byte[]转十六进制String
 *
 * @param byteArray
 * @return
 */
public static String byteArrayToHexStr(byte[] byteArray) {
    if (byteArray == null) {
        return null;
    }
    char[] hexArray = "0123456789ABCDEF".toCharArray();
    char[] hexChars = new char[byteArray.length * 2];
    for (int j = 0; j < byteArray.length; j++) {
        int v = byteArray[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
}

/**
 * 十六进制String转byte[]
 *
 * @param str
 * @return
 */
public static byte[] hexStrToByteArray(String str) {
    if (str == null) {
        return null;
    }
    if (str.length() == 0) {
        return new byte[0];
    }
    byte[] byteArray = new byte[str.length() / 2];
    for (int i = 0; i < byteArray.length; i++) {
        String subStr = str.substring(2 * i, 2 * i + 2);
        byteArray[i] = ((byte) Integer.parseInt(subStr, 16));
    }
    return byteArray;
}

2019.2.21

研究String、byte、int之间的互相转换

public static void main(String[] args) {
    System.out.println("============================  string byte 互转 start ================================");

    byte[] bytes = new byte[]{0X0F, 0x04, 0x02, 0X00};

    System.out.println("bytes :" + Arrays.toString(bytes));

    String s = byteArrayToHexStr(bytes);

    System.out.println("byte to string:" + s);

    byte[] bytes2 = hexStringToByteArray("03");

    System.out.println("byte:" + Arrays.toString(bytes2));

    System.out.println("byte to string:" + byteArrayToHexStr(bytes2));

    System.out.println("============================ test ================================");
    byte[] bs = hexStringToByteArray("0F0402000104FFFF");
    System.out.println(Arrays.toString(bs));
    System.out.println("---------------------------------------");

    byte[] bytes4 = new byte[6];
    bytes4[0] = 0X0F;
    bytes4[1] = 0X04;
    bytes4[2] = 0X02;
    bytes4[3] = 0X00;
    bytes4[4] = 0X01;
    bytes4[5] = 0X04;
    System.out.println(Arrays.toString(bytes4));

    System.out.println("---------------------------------------");

    bytes4[bytes4.length - 1] = checkSum(bytes4);

    bytes4[1] = (byte) (bytes4.length - 2);

    System.out.println("length :" + (bytes4.length - 2));

    System.out.println(Arrays.toString(bytes4));

    System.out.println("--------------------------------------");
    byte[] bytes5 = hexStringToByteArray("0F65010001050A001414001E1E00282800320A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A0A000A28");
    System.out.println(Arrays.toString(bytes5));
    checkSum(bytes5);
    bytes5[1] = (byte) (bytes5.length - 2);
    System.out.println("length :" + (bytes5.length - 2));
    System.out.println("---------------------------------------");

    String content = "4";
    System.out.println("原字符串:" + content);
    String hex2Str = conver2HexStr(content.getBytes());
    System.out.println("\n转换为二进制的表示形式:" + hex2Str);
    byte[] b = conver2HexToByte(hex2Str);
    System.out.println("二进制字符串还原:" + new String(b));

    String hex16Str = conver16HexStr(content.getBytes());
    System.out.println("\n转换为十六进制的表示形式:" + hex16Str);
    System.out.println("十六进制字符串还原:" + new String(conver16HexToByte(hex16Str)));
}

public static byte checkSum(byte[] bytes4) {
    byte sum = 0;
    for (int i = 2; i < bytes4.length - 1; i++) {
        sum += bytes4[i];
    }
    sum += 0X01;
    System.out.println("checkSum:" + sum);
    return sum;
}

/**
 * 将String转换为byte[]
 *
 * @param s String
 * @return byte[]
 */
public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
    }
    return data;
}

/**
 * byte[]转十六进制String
 *
 * @param byteArray
 * @return
 */
public static String byteArrayToHexStr(byte[] byteArray) {
    if (byteArray == null) {
        return null;
    }
    char[] hexArray = "0123456789ABCDEF".toCharArray();
    char[] hexChars = new char[byteArray.length * 2];
    for (int j = 0; j < byteArray.length; j++) {
        int v = byteArray[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
}


/**
 * byte数组转换为二进制字符串,每个字节以","隔开
 **/
public static String conver2HexStr(byte[] b) {
    StringBuffer result = new StringBuffer();
    for (int i = 0; i < b.length; i++) {
        result.append(Long.toString(b[i] & 0xff, 2) + ",");
    }
    return result.toString().substring(0, result.length() - 1);
}

/**
 * 二进制字符串转换为byte数组,每个字节以","隔开
 **/
public static byte[] conver2HexToByte(String hex2Str) {
    String[] temp = hex2Str.split(",");
    byte[] b = new byte[temp.length];
    for (int i = 0; i < b.length; i++) {
        b[i] = Long.valueOf(temp[i], 2).byteValue();
    }
    return b;
}


/**
 * byte数组转换为十六进制的字符串
 **/
public static String conver16HexStr(byte[] b) {
    StringBuffer result = new StringBuffer();
    for (int i = 0; i < b.length; i++) {
        if ((b[i] & 0xff) < 0x10)
            result.append("0");
        result.append(Long.toString(b[i] & 0xff, 16));
    }
    return result.toString().toUpperCase();
}

/**
 * 十六进制的字符串转换为byte数组
 **/
public static byte[] conver16HexToByte(String hex16Str) {
    char[] c = hex16Str.toCharArray();
    byte[] b = new byte[c.length / 2];
    for (int i = 0; i < b.length; i++) {
        int pos = i * 2;
        b[i] = (byte) ("0123456789ABCDEF".indexOf(c[pos]) << 4 | "0123456789ABCDEF".indexOf(c[pos + 1]));
    }
    return b;
}

你可能感兴趣的:(android,java,开发语言)