最近开发任务是和摄像机彩屏进行通讯。在进行串口通讯时需要传输byte数组,而当内容为中文时需要指定GBK编码,否则会乱码。所以总结下这两个java方法。
1 /** 2 * 将字符串转为指定编码的16进制 3 * 4 * @param str 5 * @return 6 */ 7 public static String encode(String str) throws Exception { 8 String hexString = "0123456789ABCDEF"; 9 //根据编码获取字节数组 10 byte[] bytes = str.getBytes("GBK"); 11 StringBuilder sb = new StringBuilder(bytes.length * 2); 12 //将字节数组中每个字节拆解成2位16进制整数 13 for (int i = 0; i < bytes.length; i++) { 14 sb.append(hexString.charAt((bytes[i] & 0xf0) >> 4)); 15 sb.append(hexString.charAt((bytes[i] & 0x0f) >> 0)); 16 } 17 return sb.toString(); 18 }
1 /** 2 * 将16进制字符串转换为byte[] 3 * 4 * @param str 5 * @return 6 */ 7 public static byte[] toBytes(String str) { 8 if (str == null || str.trim().equals("")) { 9 return new byte[0]; 10 } 11 12 byte[] bytes = new byte[str.length() / 2]; 13 for (int i = 0; i < str.length() / 2; i++) { 14 String subStr = str.substring(i * 2, i * 2 + 2); 15 bytes[i] = (byte) Integer.parseInt(subStr, 16); 16 } 17 18 return bytes; 19 }