package com.lunhan.xxx.host; import com.lunhan.xxx.common.config.SysConfig; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.math.BigInteger; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class DemoTest { private static String dataq="FEFEFEFE687236123413EFF72281EDF6E001FFFEFF01060605040503FF070501FFFE040202FFC9363736373338383838373718F7372137373737372E0D1B81823737373737553725373736373737372732453700362F0037370037373737373718F71F332E3737344F3737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737371F332F3737344F3737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737371F33303737344F3737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737371F33313737344F3737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737371F33323737344F3737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737371F33333737344F3737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737371F33343737344F3737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737370AFF050637370306373737060504370506050704FE0503FF374516"; public static void main(String[] args) { } public static String decimalToHex(int decimal) { return String.format("%02X", decimal); } // å°†16进制å—符串转æ¢ä¸ºå—节数组 public static byte[] hexStringToByteArray(String hexString) { int len = hexString.length(); byte[] data = new byte[len / 2]; for (int i = 0; i < len; i += 2) { data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i+1), 16)); } return data; } // è®¡ç®—ç´¯åŠ å’Œ public static int calculateChecksum(byte[] bytes) { BigInteger sum = BigInteger.ZERO; for (byte b : bytes) { sum = sum.add(BigInteger.valueOf(b & 0xFF)); } return sum.intValue(); } /** * 获å–当剿—¶é—´çš„BCDæ—¶é—´ * @return */ public static String timeBCD(){ // 获å–当剿—¥æœŸå’Œæ—¶é—´ LocalDateTime now = LocalDateTime.now(); // æå–年月日时分秒 int year = now.getYear() % 100; // å–年份的åŽä¸¤ä½ int month = now.getMonthValue(); int day = now.getDayOfMonth(); int hour = now.getHour(); int minute = now.getMinute(); int second = now.getSecond(); StringBuilder stringBuilder = new StringBuilder(padZero(year)); stringBuilder.append(padZero(month)) .append(padZero(day)) .append(padZero(hour)) .append(padZero(minute)) .append(padZero(second)); return stringBuilder.toString(); } /** * ä¸è¶³ä¸¤ä½å˜æˆä¸¤ä½ * @param decimal * @return */ public static String padZero(int decimal) { return String.format("%02d", decimal); } // åŽŸæ–‡æ•°æ®æŒ‰å—节å–å,然åŽå†åŠ ä¸Š38H public static String reverseAndAdd38H(String decimalString ,int length) { // 如果å—符串长度å°äºŽè§„å®šçš„ä½æ•°ï¼Œåˆ™åœ¨å‰é¢æ·»åŠ 0ï¼Œä½¿å…¶è¾¾åˆ°è§„å®šçš„ä½æ•° while (decimalString.length() < length) { decimalString = "0" + decimalString; } StringBuilder result = new StringBuilder(); for (int i = 0; i < decimalString.length(); i += 2) { // æ¯æ¬¡å–两个å—符作为一个å•ä½ String unit = decimalString.substring(i, i + 2); // å°†æ¯ä¸ªå•ä½è§£æžä¸º16进制数值 int value = Integer.parseInt(unit, 16); // å–å value = ~value; // 将其å‡åŽ»38H value += 0x38; // èŽ·å–æœ€åŽä¸¤ä½ int lastTwoDigits = value & 0xFF; // 0xFF是16进制表示的255 // 将最åŽä¸¤ä½è½¬æ¢ä¸º16进制å—符串 String hexResult = Integer.toHexString(lastTwoDigits); // ä¸è¶³ä¸¤ä½çš„æƒ…况补0 if (hexResult.length() < 2) { hexResult = "0" + hexResult; } // å°†ç»“æžœè¿½åŠ åˆ°StringBuilderä¸ result.append(hexResult); } return String.valueOf(result); } private static String hexStringToDecimalInt(StringBuilder hexString) { StringBuilder result = new StringBuilder(); // 如果输入的å—符串长度为奇数,补0ä½¿å…¶é•¿åº¦ä¸ºå¶æ•° if (hexString.length() % 2 != 0) { hexString = new StringBuilder("0" + hexString); } for (int i = 0; i < hexString.length(); i += 2) { // æ¯æ¬¡å–两个å—符作为一个å•ä½ String unit = hexString.substring(i, i + 2); // å°†æ¯ä¸ªå•ä½è§£æžä¸º16进制数值 int value = Integer.parseInt(unit, 16); // 将其å‡åŽ»38H value -= 0x38; // å–å value = ~value; // èŽ·å–æœ€åŽä¸¤ä½ int lastTwoDigits = value & 0xFF; // 0xFF是16进制表示的255 // 将最åŽä¸¤ä½è½¬æ¢ä¸º16进制å—符串 String hexResult = Integer.toHexString(lastTwoDigits); // ä¸è¶³ä¸¤ä½çš„æƒ…况补0 if (hexResult.length() < 2) { hexResult = "0" + hexResult; } // å°†ç»“æžœè¿½åŠ åˆ°StringBuilderä¸ result.append(hexResult); } return String.valueOf(result); } public static String getCurrentTimeInBCD() { LocalDateTime now = LocalDateTime.now(); // 获å–当å‰ç³»ç»Ÿæ—¶é—´ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); // å®šä¹‰æ—¶é—´æ ¼å¼ String formattedDateTime = now.format(formatter); // æ ¼å¼åŒ–时间为å—符串 return Long.toHexString(Long.parseLong(formattedDateTime)); } public static String hexStringToDecimalString(String hexString) { // å°†16进制å—符串转æ¢ä¸ºå¯¹åº”çš„10进制å—符串 String decimalString = new BigInteger(hexString, 16).toString(); return decimalString; } public static String reverseInPairs(String str) { StringBuilder reversed = new StringBuilder(); // 从å—ç¬¦ä¸²æœ«å°¾å¼€å§‹ï¼Œæ¯æ¬¡å–两个å—ç¬¦ï¼Œå¹¶æ·»åŠ åˆ°reversed StringBuilder ä¸ for (int i = str.length() - 2; i >= 0; i -= 2) { reversed.append(str.charAt(i)).append(str.charAt(i+1)); } return reversed.toString(); } private static String H16ToASCII(String s){ // å°†å—符串按两个å—符一组进行分割 String[] hexPairs = s.split("(?<=\\G..)"); // å°†æ¯ä¸ªåå…进制数转æ¢ä¸ºå¯¹åº”çš„ASCIIå—ç¬¦ï¼Œå¹¶æ‹¼æŽ¥æˆæœ€ç»ˆçš„ASCIIå—符串 StringBuilder asciiString = new StringBuilder(); for (String hexPair : hexPairs) { int decimalValue = Integer.parseInt(hexPair, 16); asciiString.append((char) decimalValue); } return asciiString.toString(); } }