String和byte[]的相互转换,字节数组转换
- String转换byte[]
- 文本
- 16进制字节数组
- byte[]转换String
- 文本
- 16进制
- 其它
String转换byte[]
文本
将字符串(String)转换为字节(byte)的方法。默认使用的是UTF-8编码
StandardCharsets.UTF_8需要引用import java.nio.charset.StandardCharsets;
StandardCharsets.UTF_8的值是"UTF-8"
public byte[] stringToBytes(String s) { //return s.getBytes(StandardCharsets.UTF_8);//return s.getBytes("UTF-8");return s.getBytes();
}
使用时直接调用,例如像串口发送指令,文本转byte时使用。
str = stringToBytes(msg);
例如输入msg【0100112233CC】得到结果文本显示【0100112233CC】
如果是十六进制显示是【30 31 30 30 31 31 32 32 33 33 43 43】
16进制字节数组
十六进制字节数组字符串转换十六进制字节数组
//字符串转字节数组private byte[] hexStr2bytes(String hex) {int len = (hex.length() / 2);byte[] result = new byte[len];char[] achar = hex.toUpperCase().toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;result[i] = (byte) (hexChar2byte(achar[pos]) << 4 | hexChar2byte(achar[pos + 1]));}return result;}
//把16进制字符[0123456789abcdef](含大小写)转成字节private static int hexChar2byte(char c) {switch (c) {case '0':return 0;case '1':return 1;case '2':return 2;case '3':return 3;case '4':return 4;case '5':return 5;case '6':return 6;case '7':return 7;case '8':return 8;case '9':return 9;case 'a':case 'A':return 10;case 'b':case 'B':return 11;case 'c':case 'C':return 12;case 'd':case 'D':return 13;case 'e':case 'E':return 14;case 'f':case 'F':return 15;default:return -1;}}
使用
String msg="0100112233CC";
byte[] bytes = hexStr2bytes(msg);
例如输入msg【0100112233CC】得到结果十六进制显示【01 00 11 22 33 CC】
byte[]转换String
文本
ASCII码
将字节(byte)转换为字符串(String)的方法。默认使用的是UTF-8编码
String result = new String(bytes);
//String result = new String(bytes, "UTF-8");
//String result = new String(bytes, StandardCharsets.UTF_8);
byte[] bytes= {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100};
String result = new String(received, "UTF-8");
得到结果Hello World
例如输入bytes= {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100};得到结果文本显示【Hello World】,十六进制显示【48 65 6C 6C 6F 20 57 6F 72 6C 64】
16进制
public static String bytesToHex(byte[] bytes) {StringBuilder result = new StringBuilder();for (byte b : bytes) {result.append(String.format("%02X", b));}return result.toString();}
使用时
byte[] bytes= {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100};
String ss=bytesToHex(bytes);
得到结果 48656C6C6F20576F726C64
其它
字节数组编码/解码在线网站
未完待续中
与君共勉!待续
欢迎指错,一起学习