使用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数组,这个类默认是所有的字符串格式都是正确的。具体代码如下:
函数stringToBytes(String command)将字符串装换成对应的byte[]数组,而bytesToString(byte[] bytes)则刚好相反。最后测试的输出结果是:
80CA9F7F2D
A0345678
如果各位有更好的方法,请不吝赐教!
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
如果各位有更好的方法,请不吝赐教!
相关文章推荐
- java异常总结
- Java插入MySQL中文出现乱码
- Spring控制反转(IOC)和依赖注入(DI),再记不住就去出家!
- Java API ——Scanner类
- java 对象引用与赋值
- Cucumber java + Webdriver (6) Cucumber的数据驱动
- Java substring()用法
- javaBean类的一些操作
- 关于spring4.0和hibernate4.3整合的时annotation的小常识
- java.lang.IllegalStateException: Fragement no longer exists for key f0: index 0
- SpringData JPA的学习笔记之环境搭建
- Spring随笔6
- Java Iterator与ListIterator的主要区别
- java连接mysql删除操作
- Java常用的设计模式13:常用设计模式之桥接模式(结构型模式)
- LT【深入Java虚拟机】之八:Java垃圾收集机制
- java 多线程 总结
- Java常用的设计模式12:常用设计模式之外观模式(结构型模式)
- Eclipse/MyEclipse注释模板和格式化模板的使用
- Java <!--随机数的产生 -->