java String转byte[],并以16进制形式显示byte[]中的内容

在日常开发中遇到,需要将String转换成byte[],同时需要查看byte[]中的十六进制值。

下述示例代码演示了一种实现上述需求的方式。

示例代码:

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "12abAB你好";

        System.out.println(str);
        System.out.println(Arrays.toString(string2byte(str, null)));
        System.out.println(byte2radixString(string2byte(str, null), 16));
    }

    // 将String 转换为byte[]。字符集由charsetName决定,当charsetName为null时,采用平台的默认字符集
    static byte[] string2byte(String str, String charsetName) throws UnsupportedEncodingException {
        if (str == null || str.isEmpty()) {
            return null;
        }
        if (charsetName == null || charsetName.isEmpty()) {
            // 将字符串转换为字节数组。该方法默认使用平台的默认字符集,将该字符串编码为字节。
            return str.getBytes();
        } else {
            // 将字符串转换为字节数组。该方法使用charsetName字符集,将该字符串编码为字节。
            return str.getBytes(charsetName);
        }
    }

    // 将byte[] 转换为String。进制由radix决定,radix常用值为16
    static String byte2radixString(byte[] bytes, int radix) {
        if (bytes == null) {
            return null;
        }

        // new BigInteger(1, bytes)使用这些字节来创建一个新的大整数。这里的1是表示使用二进制的补码表示法来解析字节。
        // toString(radix)方法将这个大整数转换为radix进制的字符串。
        return new BigInteger(1, bytes).toString(radix);
    }
}

运行结果:

12abAB你好

[49, 50, 97, 98, 65, 66, -28, -67, -96, -27, -91, -67]

313261624142e4bda0e5a5bd

关于字符集,可以参考资料: ASCII字符集、Unicode字符集下UTF-8 和UTF-16编码、GBK(GB2312)字符集_utf8字符集下载_小飞侠hello的博客-CSDN博客

你可能感兴趣的:(JAVA知识点杂烩,java,开发语言)