小写英文字符转换为16进制字符串再转为byte数组,在转回String时出现乱码

RUA好多鱼~ 2018-07-31 02:33:57
大佬帮忙看看是哪里出了问题,我把英文字符串每一个字符的ascii码转为16进制,然后再用new String(byte[])方法转回来,但是为什么大写的英文字符可以正常转换回来,小写的转换回来就是乱码呢?下面是全部代码:

public class Test {

public static void main(String[] args){
String s1 = "sunhaowei";
String s2 = convertDecimalToHex(asciiToDecimal(s1));
System.out.println(s2);

String s3 = "SUNHAOWEI";
String s4 = convertDecimalToHex(asciiToDecimal(s3));
System.out.println(s4);

byte[] b1 = hexStringToBytes(s2);
System.out.println(new String(b1));

byte[] b2 = hexStringToBytes(s4);
System.out.println(new String(b2));

}

/**
* 将16进制str转换为10进制格式的字符串
*
* 例如:
* 十六进制 120418
* 十进制 180424
*/
public static String convertHexToDecimal(String str) {
String hex = "";
String pattern = "%02d";

for(int i=0; i<str.length()/2; i++) {
hex += String.format(pattern,Integer.parseInt(str.substring(i*2,i*2+2),16));
}

return hex;
}

/**
* 将10进制str转换为16进制格式的字符串
*
* 例如:
* 十进制 180424
* 十六进制 120418
*/
public static String convertDecimalToHex(String str) {
String hex = "";
String pattern = "%02x";

for(int i=0; i<str.length()/2; i++) {
hex += String.format(pattern, Integer.valueOf(str.substring(i*2,i*2+2)));
}

return hex;
}

/**
* 将ASCII码转换为10进制str
*/
public static String asciiToDecimal(String value) {
StringBuffer sbu = new StringBuffer();
char[] ch = value.toCharArray();
for (int i = 0; i < ch.length; i++) {
sbu.append((int)ch[i]);
}
return sbu.toString();
}

public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
// toUpperCase将字符串中的所有字符转换为大写
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
// toCharArray将此字符串转换为一个新的字符数组。
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}

//charToByte返回在指定字符的第一个发生的字符串中的索引,即返回匹配字符
public static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}

}
...全文
250 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
RUA好多鱼~ 2018-07-31
  • 打赏
  • 举报
回复
问题已经找到,是小写的字母转换10进制时是3位,结果转换为16进制时是按照2位转换的

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧