在日常开发中遇到,需要将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博客