字符串和字节数组之间互相转换失败

java中对String.getBytes()得到的字节数组处理,处理完转换为String,再通过String.getBytes()得到的字节数组和原字节数组不同,再次对... java中对String.getBytes()得到的字节数组处理,处理完转换为String,再通过String.getBytes()得到的字节数组和原字节数组不同,再次对字节数组做相反的处理得到的字符串乱码 展开
 我来答
育知同创教育
2016-10-20 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
方法一
思路:先把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();
}
蜗牛46
2016-10-20 · TA获得超过1015个赞
知道小有建树答主
回答量:1176
采纳率:50%
帮助的人:659万
展开全部
你这就是编码的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2016-10-20
展开全部
编码不对应 ~~~~~~ 看看JAVA的源码的编码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式