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(); } }