Android Studio的笔记--String和byte[]
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
其它
字节数组编码/解码在线网站
未完待续中
与君共勉!待续
欢迎指错,一起学习