package ng.devices; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class HexUtil { public static String formatHex(String hex) { String result = ""; for (int i = 0; i < hex.length() - 1; i+=2) { String output = hex.substring(i, i + 2); result += ("0x" + output + " "); } if (result.length() > 0) { result = result.substring(0, result.lastIndexOf(" ")); } return result; } //正常的字母数字变成字节数发�?�给盒子 public static String asciiToHex(String str) { char[] chars = str.toCharArray(); StringBuffer hex = new StringBuffer(); for (int i = 0; i < chars.length; i++) { hex.append(Integer.toHexString(chars[i])); } return hex.toString(); } public static String hexToAscii(String hex) { StringBuffer result = new StringBuffer(); for (int i = 0; i < hex.length() - 1; i+= 2) { String output = hex.substring(i, i + 2); int decimal = Integer.parseInt(output, 16); result.append((char) decimal); } return result.toString(); }//12300 //00321 //二进制转十进�? public static int int2ToHex(String number) { return Integer.parseInt(number, 2); } //二进制转16进制 4�? public static String intBinaryTo16(String number) { int num=int2ToHex(number); return intTo2ByteHex(num); } //十六进制转十进制 public static int int16ToHex(String number) { return Integer.parseInt(number, 16); } //十进制转二进�? public static String intToBinary(int number) { return Integer.toBinaryString(number); } //十六进制转二进制 public static String int16ToBinary(String number) { return intToBinary(int16ToHex(number)); } //十六进制转二进制 public static String int16ToBinaryEight(String number,int count) { String binary=int16ToBinary(number); String zero=""; for (int i = 0; i Hello World!|This is the first signal from device!")); // // System.out.println(String.format("%4S", HexUtil.intToHex(55)).replace(' ', '0')); // System.out.println(HexUtil.hexToInt("00d2")); // // System.out.println(HexUtil.formatHex("3c5354413e")); String message = "Hello World!|This is the first signal from device!"; int length = message.length() * 2 + 10; // 长度包括结尾�?,一个字符在信号中由两个字节表示�? String command = HexUtil.asciiToHex(""); // 添加�?始标�? command += (String.format("%4s", HexUtil.intToHex(length)).replace(' ', '0')); // 添加长度标识 command += "01"; // 添加设备类型 0x01表示切割机,0x02表示钢化�? command += "0001"; // 添加设备型号�?0x0001表示基本款,0x0002表示中级�? command += "0000"; // 功能号,0x0000是下位机主动发给上位机;0x0001是上位机修改下位机RTC command += "00"; // 加密方式�?0x00表示不加�? Calendar c = Calendar.getInstance(); // 添加时间,并将时间转换为16进制表示 command += (String.format("%4s", HexUtil.intToHex(c.get(Calendar.YEAR))).replace(' ', '0')); command += (String.format("%2s", HexUtil.intToHex(c.get(Calendar.MONTH) + 1)).replace(' ', '0')); command += (String.format("%2s", HexUtil.intToHex(c.get(Calendar.DAY_OF_MONTH))).replace(' ', '0')); command += (String.format("%2s", HexUtil.intToHex(c.get(Calendar.HOUR_OF_DAY))).replace(' ', '0')); command += (String.format("%2s", HexUtil.intToHex(c.get(Calendar.MINUTE))).replace(' ', '0')); command += (String.format("%2s", HexUtil.intToHex(c.get(Calendar.SECOND))).replace(' ', '0')); command += ("00000001"); // 唯一标识,使用序列号 command += (HexUtil.asciiToHex(message)); // 添加主要信息内容 command += (HexUtil.asciiToHex("")); // 添加结尾标识 System.out.println(command); System.out.println(String.format("%4s", "1")); Date time = new Date(); System.out.println(new SimpleDateFormat("yyyy-MM-dd-hh-mm-ss").format(time)); String timeHex = timeToHex(time); System.out.println(timeHex); System.out.println(hexToTime(timeHex)); System.out.println("3c5354413e001a00000000000000000000000000010007e0021500152800000000000000005041001d017c017c01017c3c454f463e".length()); System.out.println(hexToBinary("0c0a")); System.out.println(Integer.MAX_VALUE); } public static String hexTo2Binary(String hexString) { String binaryString = Integer.toBinaryString(hexToInt(hexString)); return String.format("%8s", binaryString).replace(' ', '0'); } }