From f1d079f9c0b3d384090477ca54e0548373d62b57 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Thu, 16 Jan 2025 11:56:39 +0800
Subject: [PATCH] 配置修改

---
 src/main/java/com/genersoft/iot/vmp/netty/util/HexStringTool.java |  303 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 303 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/netty/util/HexStringTool.java b/src/main/java/com/genersoft/iot/vmp/netty/util/HexStringTool.java
new file mode 100644
index 0000000..25eefe8
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/netty/util/HexStringTool.java
@@ -0,0 +1,303 @@
+package com.genersoft.iot.vmp.netty.util;
+
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+public class HexStringTool {
+
+
+    private static final char[] HEX_CHAR_ARR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+    private static final String HEX_STR = "0123456789abcdef";
+
+    //对字符串,进行分组,转化为List
+    public static List<String> getStrList(String str16, int frontLen, int size, int length) {
+        List<String> list = new ArrayList<String>();
+        String content = str16.substring(frontLen);
+        String tem = "";
+        for (int index = 0; index < size; index++) {
+            tem = content.substring(0, length);
+            content = content.substring(length);
+            list.add(tem);
+        }
+        return list;
+    }
+
+    //对字符串,进行分组,转化为List(字符串数据类型转化专用)
+    public static List<String> getStrList(String str16, int frontLen, int size, int totalLen, int lenLen) {
+        List<String> list = new ArrayList<>();
+        String content = str16.substring(frontLen);
+        String tem = "";
+        for (int index = 0; index < size; index++) {
+            String len16 = content.substring(totalLen * 2, (totalLen + lenLen) * 2);
+            int len = Integer.parseInt(len16, 16);
+            int length = (totalLen + lenLen + len) * 2;
+            tem = content.substring(0, length);
+            content = content.substring(length);
+            list.add(tem);
+        }
+        return list;
+    }
+
+    //字符串转换unicode
+    public static String string2Unicode(String string) {
+        StringBuffer unicode = new StringBuffer();
+        for (int i = 0; i < string.length(); i++) {
+            // 取出每一个字符
+            char c = string.charAt(i);
+            // 转换为unicode
+            unicode.append("\\u" + Integer.toHexString(c));
+        }
+        return unicode.toString();
+    }
+
+    //字符串转化成为16进制字符串
+    public static String strTo16(String s) {
+        String str = "";
+        for (int i = 0; i < s.length(); i++) {
+            int ch = (int) s.charAt(i);
+            String s4 = Integer.toHexString(ch);
+            str = str + s4;
+        }
+        return str;
+    }
+
+    //16进制转换成为string类型字符串
+    public static String hexStringToString(String s) {
+        if (s == null || s.equals("")) {
+            return null;
+        }
+        s = s.replace(" ", "");
+        byte[] baKeyword = new byte[s.length() / 2];
+        for (int i = 0; i < baKeyword.length; i++) {
+            try {
+                baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        try {
+            s = new String(baKeyword, "UTF-8");
+            new String();
+        } catch (Exception e1) {
+            e1.printStackTrace();
+        }
+        return s;
+    }
+
+    //unicode 转字符串
+    public static String unicode2String(String unicode) {
+        StringBuffer string = new StringBuffer();
+        String[] hex = unicode.split("\\\\u");
+        for (int i = 1; i < hex.length; i++) {
+            // 转换出每一个代码点
+            int data = Integer.parseInt(hex[i], 16);
+            // 追加成string
+            string.append((char) data);
+        }
+        return string.toString();
+    }
+
+    //字符串转换成为16进制(无需Unicode编码)
+    public static String str2HexStr(String str) {
+        char[] chars = "0123456789ABCDEF".toCharArray();
+        StringBuilder sb = new StringBuilder("");
+        byte[] bs = str.getBytes();
+        int bit;
+        for (int i = 0; i < bs.length; i++) {
+            bit = (bs[i] & 0x0f0) >> 4;
+            sb.append(chars[bit]);
+            bit = bs[i] & 0x0f;
+            sb.append(chars[bit]);
+            // sb.append(' ');
+        }
+        return sb.toString().trim();
+    }
+
+    //16进制直接转换成为字符串(无需Unicode解码)
+    public static String hexStr2Str(String hexStr) {
+        String str = "0123456789ABCDEF";
+        char[] hexs = hexStr.toCharArray();
+        byte[] bytes = new byte[hexStr.length() / 2];
+        int n;
+        for (int i = 0; i < bytes.length; i++) {
+            n = str.indexOf(hexs[2 * i]) * 16;
+            n += str.indexOf(hexs[2 * i + 1]);
+            bytes[i] = (byte) (n & 0xff);
+        }
+        return new String(bytes);
+    }
+
+    /**
+     * int/long转16字节字符串(按所占字节数用0补齐)
+     *
+     * @param byteLen 所占字节长度
+     * @param b       需要转换的数字
+     * @return str16
+     */
+    public static String numToStr16(int byteLen, long b) {
+        return String.format("%0" + byteLen * 2 + "x", b);
+    }
+
+    /**
+     * float/double转16字节字符串(按所占字节数用0补齐)
+     *
+     * @param byteLen 所占字节长度
+     * @param b       需要转换的数字
+     * @return str16
+     */
+    public static String numToStr16(int byteLen, double b) {
+        byte[] bytes = Hex.getBytes(b);
+        int anInt = Hex.getInt(bytes);
+        return String.format("%0" + byteLen * 2 + "x", anInt);
+    }
+
+    /**
+     * 16进制字符串转字符串(ASCII)
+     *
+     * @param x16 十六进制字符串
+     * @return string
+     */
+    public static String x16toString(String x16) {
+        if (x16 == null || "".equals(x16.trim())) {
+            return "";
+        }
+        String tempStr = "";
+        byte[] b = new byte[x16.length() / 2];
+        for (int i = 0; i < x16.length() / 2; i++) {
+            tempStr = x16.substring(i * 2, i * 2 + 2);
+            int temp = Integer.parseInt(tempStr, 16);
+            b[i] = (byte) temp;
+        }
+        return new String(b, StandardCharsets.US_ASCII);
+    }
+
+    /**
+     * 16进制字符串转字符串(GBK)
+     *
+     * @param x16 十六进制字符串
+     * @return string
+     */
+    public static String x16toGbk(String x16) {
+        byte[] bytes = new byte[x16.length() / 2];
+        byte tempByte = 0;
+        byte tempHigh = 0;
+        byte tempLow = 0;
+        for (int i = 0, j = 0; i < x16.length(); i += 2, j++) {
+            tempByte = (byte) (((int) x16.charAt(i)) & 0xff);
+            if (tempByte >= 48 && tempByte <= 57) {
+                tempHigh = (byte) ((tempByte - 48) << 4);
+            } else if (tempByte >= 97 && tempByte <= 101) {
+                tempHigh = (byte) ((tempByte - 97 + 10) << 4);
+            }
+            tempByte = (byte) (((int) x16.charAt(i + 1)) & 0xff);
+            if (tempByte >= 48 && tempByte <= 57) {
+                tempLow = (byte) (tempByte - 48);
+            } else if (tempByte >= 97 && tempByte <= 101) {
+                tempLow = (byte) (tempByte - 97 + 10);
+            }
+            bytes[j] = (byte) (tempHigh | tempLow);
+        }
+        String result = null;
+        try {
+            result = new String(bytes, "GBK");
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+    public static boolean isChinese(String s) {
+        boolean result = false;
+        for (int i = 0; i < s.length(); i++) {
+            char c = s.charAt(i);
+            Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
+            if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
+                    || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
+                    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
+                    || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
+                    || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
+                    || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
+                result = true;
+            }
+        }
+        return result;
+    }
+
+    private static String byteArrToHex(byte[] btArr) {
+        char[] strArr = new char[btArr.length * 2];
+        int i = 0;
+        for (byte bt : btArr) {
+            strArr[i++] = HEX_CHAR_ARR[bt >>> 4 & 0xf];
+            strArr[i++] = HEX_CHAR_ARR[bt & 0xf];
+        }
+        return new String(strArr);
+    }
+
+    private static byte[] hexToByteArr(String hexStr) {
+        char[] charArr = hexStr.toCharArray();
+        byte[] btArr = new byte[charArr.length / 2];
+        int index = 0;
+        for (int i = 0; i < charArr.length; i++) {
+            int highBit = HEX_STR.indexOf(charArr[i]);
+            int lowBit = HEX_STR.indexOf(charArr[++i]);
+            btArr[index] = (byte) (highBit << 4 | lowBit);
+            index++;
+        }
+        return btArr;
+    }
+
+    /**
+     * 字符串转16进制字符串(无汉字utf-8,有汉字gbk)
+     *
+     * @param str
+     * @return
+     */
+    public static String str2StrHex(String str) {
+        boolean chinese = isChinese(str);
+        if (chinese) {
+            try {
+                byte[] bytes1 = str.getBytes(StandardCharsets.UTF_8);
+                byte[] bytes2 = new String(bytes1, StandardCharsets.UTF_8).getBytes("gbk");
+                String gbk = new String(bytes2, "gbk");
+                byte[] gbkArr = gbk.getBytes();
+                return byteArrToHex(gbkArr);
+
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+                return null;
+            }
+        } else {
+            return strTo16(str);
+        }
+    }
+
+    /**
+     * 16进制字符串转字符串(无汉字utf-8,有汉字gbk)
+     *
+     * @param strHex
+     * @return
+     */
+    public static String strHex2Str(String strHex) {
+        byte[] bytes = hexToByteArr(strHex);
+        String s1 = new String(bytes, StandardCharsets.UTF_8);
+        boolean chinese = isChinese(s1);
+        if (!chinese) {
+            try {
+                return new String(bytes, "gbk");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+                return null;
+            }
+        } else {
+            return s1;
+        }
+    }
+
+
+}
+
+

--
Gitblit v1.9.3