字符串和字节数组之间互相转换失败
发布网友
发布时间:2022-04-22 16:12
我来回答
共3个回答
热心网友
时间:2023-09-14 18:05
方法一
思路:先把byte[] 转换维char[] ,再把char[] 转换为字符串
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static String bytes2Hex(byte[] src) {
if (src == null || src.length <= 0) {
return null;
}
char[] res = new char[src.length * 2]; // 每个byte对应两个字符
final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
for (int i = 0, j = 0; i < src.length; i++) {
res[j++] = hexDigits[src[i] >> 4 & 0x0f]; // 先存byte的高4位
res[j++] = hexDigits[src[i] & 0x0f]; // 再存byte的低4位
}
return new String(res);
}
方法二
思路:先把byte转换为int类型,再转换为字符串
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static String bytesToHex(byte[] src){
if (src == null || src.length <= 0) {
return null;
}
StringBuilder stringBuilder = new StringBuilder("");
for (int i = 0; i < src.length; i++) {
// 之所以用byte和0xff相与,是因为int是32位,与0xff相与后就舍弃前面的24位,只保留后8位
String str = Integer.toHexString(src[i] & 0xff);
if (str.length() < 2) { // 不足两位要补0
stringBuilder.append(0);
}
stringBuilder.append(str);
}
return stringBuilder.toString();
}
热心网友
时间:2023-09-14 18:05
你这就是编码的问题
热心网友
时间:2023-09-14 18:06
编码不对应 ~~~~~~ 看看JAVA的源码的编码