【更新中】springboot集成netty中可以用到的工具类

json字符串与16进制字符串的转换工具类

public class BinaryConversionUtil {
    
    public static void main(String[] args) {
        // json字符串转为16进制字符串
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("cmd", "auth");
        jsonObject.put("deviceId", "123456");
        jsonObject.put("token", "1");
        jsonToHexString(jsonObject);
        //  16进制字符串转为ascii码字符串
        String hexString = "7B 22 63 6F 64 65 22 3A 31 2C 22 63 6D 64 22 3A 22 65 72 72 6F 72 22 7D";
        hexStringToString(hexString);
    }

    /**
     * json字符串转为16进制字符串
     * @param jsonObject
     */
    public static void jsonToHexString(JSONObject jsonObject){
        byte[] byteArray = jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8);
        System.out.println("字节数组长度:" + Integer.toHexString(byteArray.length));
        // 遍历字节数组,并打印每个字节的十六进制表示
        for (byte b : byteArray) {
            // 将字节转换为无符号的十六进制字符串,并确保其为两位
            String hexString = String.format("%02x", b & 0xFF);
            System.out.print(hexString + " ");
        }
        // 输出换行,以便结果更清晰
        System.out.println();
    }

    /**
     * 16进制字符串转为ascii码字符串
     * @param hexString
     */
    public static void hexStringToString(String hexString) {
        // 将十六进制字符串分割并转换为字节数组
        byte[] byteArray = hexStringToByteArray(hexString.replace(" ", ""));
        // 将字节数组转换为ASCII字符串
        String asciiString = new String(byteArray, StandardCharsets.US_ASCII);
        System.out.println(asciiString);
    }

    // 辅助方法:将十六进制字符串转换为字节数组
    private static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                    + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }
}

将两个字节合并为int类型

/**
 * 先读取高位字节再读取低位字节。
 * @param high
 * @param low
 * @return
 */
private static int mergeByte2Hex(byte high, byte low) {
    return (high << 8) | (low & 0xFF);
}

将如下格式的十六进制字符串转换为 byte 数组

例.“B4 2E 3F”

方法一

public class HexStringToByteArray {
    public static void main(String[] args) {
        String hexString = "B4 2E 3F";
        // 去除空格
        hexString = hexString.replaceAll(" ", "");
        byte[] data = new byte[hexString.length() / 2];
        for (int i = 0; i < hexString.length(); i += 2) {
            data[i / 2] = (byte) Integer.parseInt(hexString.substring(i, i + 2), 16);
        }
        // 打印字节数组
        for (byte b : data) {
            System.out.printf("%02X ", b);
        }
    }
}

方法二:使用 Apache Commons Codec 库

添加以下 Maven 依赖:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.15</version>
</dependency>
import org.apache.commons.codec.binary.Hex;

public class HexStringToByteArrayUsingCodec {
    public static void main(String[] args) {
        String hexString = "B4 2E 3F";
        hexString = hexString.replaceAll(" ", "");
        byte[] data = Hex.decodeHex(hexString);
        for (byte b : data) {
            System.out.printf("%02X ", b);
        }
    }
}

使用 ByteBuffer向 byte[] 数组中添加元素

import java.nio.ByteBuffer;

public class ByteArrayAppendWithByteBuffer {
    public static void main(String[] args) {
        byte[] originalBytes = {1, 2, 3};
        byte[] newBytes = {4, 5, 6};

        ByteBuffer buffer = ByteBuffer.allocate(originalBytes.length + newBytes.length);
        buffer.put(originalBytes);
        buffer.put(newBytes);

        byte[] result = buffer.array();

        // 打印结果
        for (byte b : result) {
            System.out.print(b + " ");
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值