import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class ByteUtil { /** * 字符串转16进制 * * @param hexString * @return */ public static byte[] hexStringToBytes(String hexString) { if (hexString == null || "".equals(hexString)) { return null; } // toUpperCase将字符串中的所有字符转换为大写 hexString = hexString.toUpperCase(); int length = hexString.length() / 2; // toCharArray将此字符串转换为一个新的字符数组。 char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } /** * charToByte返回在指定字符的第一个发生的字符串中的索引,即返回匹配字符 * * @param c * @return */ private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } /** * 将字节数组转换为16进制字符串 * * @param bytes * @return */ public static String binaryToHexString(byte[] bytes) { String hexStr = "0123456789ABCDEF"; StringBuilder result = new StringBuilder(); String hex = ""; for (byte b : bytes) { hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4)); hex += String.valueOf(hexStr.charAt(b & 0x0F)); result.append(hex).append(" "); } return result.toString(); } /** * 截取指定位置判断消息类型 * * @param position * @param data * @return */ public static String getFunctionCode(int[] position, String[] data) { StringBuilder builder = new StringBuilder(""); for (int i : position) { try { builder.append(data[i]); } catch (Exception e) { e.printStackTrace(); return null; } } return builder.toString(); } /** * Hex字符串转Byte * * @param hex 范围为0x00到0xFF * @return */ public static byte hexToByte(String hex) { return (byte) Integer.parseInt(hex, 16); } /** * @param hex * @return */ public static String hexToNumber(String hex) { hex = hex.replaceAll(" ", ""); StringBuilder intString = new StringBuilder(); for (int i = 0; i < hex.length(); i += 2) { String tem = hex.substring(i, i + 2); intString.append(Integer.parseInt(tem, 16)); } return intString.toString(); } /** * 16进制表示的字符串转换为字节数组 * * @param hexString * @return */ public static byte[] hexStringToByteArray(String hexString) { hexString = hexString.replaceAll(" ", ""); int len = hexString.length(); byte[] bytes = new byte[len / 2]; for (int i = 0; i < len; i += 2) { // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节 bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i + 1), 16)); } return bytes; } /** * int转16进制字符串(两个字节) * * @param v * @return */ public static String intToHexString(int v) { return String.format("%04x", v); } /** * int转16进制字符串(1个字节) * * @param v * @return */ public static String intToHexStringSingle(int v) { return String.format("%02x", v); } /** * 16进制字符串转int(两个字节) * * @param hex * @return */ public static int hexStringToInt(String hex) { return Integer.parseInt(hex.replaceAll(" ", ""), 16); } /** * 字符串转化成为16进制字符串 * * @param s * @return */ public static String strTo16(String s) { StringBuilder str = new StringBuilder(); for (int i = 0; i < s.length(); i++) { int ch = s.charAt(i); String s4 = Integer.toHexString(ch); str.append(s4); } return str.toString(); } /** * 字节数组转16进制 * * @param bytes 需要转换的byte数组 * @return 转换后的Hex字符串 */ public static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte aByte : bytes) { String hex = Integer.toHexString(aByte & 0xFF); if (hex.length() < 2) { sb.append(0); } sb.append(hex); } return sb.toString(); } /** * 日期转换7个字节 * * @param date * @return */ public static byte[] dateToBytes(Date date) { SimpleDateFormat df = new SimpleDateFormat("yyyy MM dd HH mm ss"); String str = df.format(date); String[] strings = str.split(" "); String[] newStrings = new String[5]; System.arraycopy(strings, 1, newStrings, 0, strings.length - 1); byte[] bytes = new byte[7]; byte[] temByte = ByteUtil.hexStringToByteArray(ByteUtil.intToHexString(Integer.parseInt(strings[0]))); bytes[0] = temByte[0]; bytes[1] = temByte[1]; int i = 2; for (String s : newStrings) { bytes[i] = ByteUtil.hexStringToByteArray(ByteUtil.intToHexStringSingle(Integer.parseInt(s)))[0]; i++; } return bytes; } /** * 7个字节转日期 * * @param hex * @return */ public static Date hexToDate(String hex) { Date date = null; SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); StringBuilder sBuf = new StringBuilder(); sBuf.append(Integer.parseInt(hex.substring(0, 4), 16)); String str = hex.substring(4); for (int i = 0; i < str.length(); i = i + 2) { int num = Integer.parseInt(str.substring(i, i + 2), 16); sBuf.append(String.format("%02d", num)); } try { date = df.parse(sBuf.toString()); } catch (ParseException e) { e.printStackTrace(); } return date; } /** * 产生numSize位16进制随机数 * * @param numSize * @return */ public static String getRandomValue(int numSize) { StringBuilder str = new StringBuilder(); for (int i = 0; i < numSize; i++) { char temp = 0; int key = (int) (Math.random() * 2); switch (key) { case 0: //产生随机数字 temp = (char) (Math.random() * 10 + 48); break; case 1: //产生a-f temp = (char) (Math.random() * 6 + 'a'); break; default: break; } str.append(temp); } return str.toString(); } public static void main(String[] args) { int v = 59466; byte[] byteArray = ByteUtil.hexStringToByteArray(ByteUtil.intToHexString(v)); byte[] byteArray2 = Integer.toHexString(v).getBytes(StandardCharsets.UTF_8); System.out.println(); }