1.在操作蓝牙模块时候,Android 根据协议写数据,写入的是16进制数据 ,蓝牙返回来的数据也是16进制 。在这里 我们就要对数据转化。
2.下面是工作中常用的方法 ,写成了一个工具类 ,可以直接拿去用 。都是经过测试 有效
public class CommonUtil { /* * 将时间转换为时间戳 */ public static String dateToStamp(String s) throws ParseException { String res; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date date = simpleDateFormat.parse(s); long ts = date.getTime(); res = String.valueOf(ts); return res; } /** * 合并byte数组 */ public static byte[] unitByteArray(byte[] byte1,byte[] byte2){ byte[] unitByte = new byte[byte1.length + byte2.length]; System.arraycopy(byte1, 0, unitByte, 0, byte1.length); System.arraycopy(byte2, 0, unitByte, byte1.length, byte2.length); return unitByte; } /* * 16进制字符串转字节数组 */ public static byte[] hexString2Bytes(String hex) { if ((hex == null) || (hex.equals(""))){ return null; } else if (hex.length()%2 != 0){ return null; } else{ hex = hex.toUpperCase(); int len = hex.length()/2; byte[] b = new byte[len]; char[] hc = hex.toCharArray(); for (int i=0; i<len; i++){ int p=2*i; b[i] = (byte) (charToByte(hc[p]) << 4 | charToByte(hc[p+1])); } return b; } } /* * 字符转换为字节 */ private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } /** * 获取当前日期是星期几<br> * * @param dt * @return 当前日期是星期几 */ public static String getWeekOfDate(Date dt) { String[] weekDays = {"07", "01", "02", "03", "04", "05", "06"}; Calendar cal = Calendar.getInstance(); cal.setTime(dt); int w = cal.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) w = 0; return weekDays[w]; } /** * 字符串转换成十六进制值 * @param bin String 我们看到的要转换成十六进制的字符串 * @return */ public static String bin2hex(String bin) { char[] digital = "0123456789ABCDEF".toCharArray(); StringBuffer sb = new StringBuffer(""); byte[] bs = bin.getBytes(); int bit; for (int i = 0; i < bs.length; i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append(digital[bit]); bit = bs[i] & 0x0f; sb.append(digital[bit]); } return sb.toString(); } /** * 把16进制字符串转化为byte数组 * @param hexString * @return */ public static byte[] toByteArray(String hexString) { if (TextUtils.isEmpty(hexString)) throw new IllegalArgumentException("this hexString must not be empty"); hexString = hexString.toLowerCase(); final byte[] byteArray = new byte[hexString.length() / 2]; int k = 0; for (int i = 0; i < byteArray.length; i++) {//因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先 byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff); byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff); byteArray[i] = (byte) (high << 4 | low); k += 2; } return byteArray; } /** * 将byte数组转为16进制字符串 此方法主要目的为方便Log的显示 */ public String bytesToHexString(byte[] src) { StringBuilder stringBuilder = new StringBuilder(""); if (src == null || src.length <= 0) { return null; } for (byte aSrc : src) { int v = aSrc & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv.toUpperCase()).append(" "); } return stringBuilder.toString(); } }
3.以上就是基本常用的方法,直接调用就好了