您的位置:首页 > 编程语言 > Java开发

使用Java来实现String字符串和Byte[]数组的转换

2015-11-03 19:50 946 查看
最近自己写了工具类将byte[] GET_DATA = {(byte)0x80,(byte)0xCA,(byte)0x9F,(byte)0x7F,(byte)0x2D};的byte数组转换成对应的字符串"80CA9F7F2D",或者是将字符串转换成对应的byte数组,这个类默认是所有的字符串格式都是正确的。具体代码如下:

public static byte[] stringToBytes(String command){
byte[] result = new byte[command.length()/2];
int index =0;
int temp =0;
for(int i=0;i<command.length();i=i+2){
char a= command.charAt(i);
char b = command.charAt(i+1);
//A-F对应的ascii码值为65-70,0-9对应的ascii码值为48-57
if(a>64){
temp = (a-55)<<4;
}else {
temp = (a-48)<<4;
}
if(b>64){
temp += b-55;
}else {
temp += b-48;
}
result[index++] = (byte) temp;

}

return result;
}
private static String bytesToString(byte[] bytes){
/*对于0xAA来说其对应int类型的数值为16*10+10=170。
* 所以对于每个byte数组元素,先获取其高4位的数值除以16,根据其是否大于10来决定其对应字符。
* 然后获取其低4位的数值,直接根据其是否大于10来决定其对应字符
*
*/
StringBuilder sb = new StringBuilder();
for(int i=0;i<bytes.length;i++){
int k = (bytes[i]&(0xf0)) >> 4;
if(k<10){
sb.append(k);
}else{
sb.append(replace(k));
}
k = (bytes[i]&(0x0f));
if(k<10){
sb.append(k);
}else{
sb.append(replace(k));
}
}
return sb.toString();
}

private static String replace(int i){
String s=null;
switch (i) {
case 10:
s="A";
break;
case 11:
s="B";
break;
case 12:
s="C";
break;
case 13:
s="D";
break;
case 14:
s="E";
break;
case 15:
s="F";
break;
default:

}
return s;
}
public static void main(String[] args) {

byte[] GET_DATA = {(byte)0x80,(byte)0xCA,(byte)0x9F,(byte)0x7F,(byte)0x2D};

System.out.println(bytesToString(GET_DATA));
String s="A0345678";
byte[] result = stringToBytes(s);
String ss = bytesToString(result);
System.out.println(ss);
}


函数stringToBytes(String command)将字符串装换成对应的byte[]数组,而bytesToString(byte[] bytes)则刚好相反。最后测试的输出结果是:

80CA9F7F2D

A0345678

如果各位有更好的方法,请不吝赐教!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: