java下16进制字符串和字节数组的相互转化
2015-11-04 17:16
381 查看
博客: 安卓之家
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917
博客园: 追风917
分享是一种美德,更是一种生活方式!!
也许你会说我是一个梦想者,但我不是唯一的一个。
悦分享,越快乐^_^
欢迎交流,转载请注明出处,谢谢!
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917
博客园: 追风917
字节数组和十六进制字符串的转化,C#上一句话搞定了,java没有,我是没找到,只有封装成库咯
这里给出几种方法完成。十六进制字符串转成字节数组
[code]/** * 16进制表示的字符串转换为字节数组 * * @param s 16进制表示的字符串 * @return byte[] 字节数组 */ public static byte[] hexStringToByteArray(String s) { int len = s.length(); byte[] b = new byte[len / 2]; for (int i = 0; i < len; i += 2) { // 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节 b[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character .digit(s.charAt(i + 1), 16)); } return b; }
[code]/** * 16进制的字符串表示转成字节数组 * * @param hexString 16进制格式的字符串 * @return 转换后的字节数组 **/ public static byte[] toByteArray(String hexString) { if (TextUtils.isEmpty(hexString)) throw new IllegalArgumentException("this hexString must not be empty"); hexString = hexString.toLowerCase(); final byte[] byteArray = new byte[hexString.length() / 2]; int k = 0; for (int i = 0; i < byteArray.length; i++) {//因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先 byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff); byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff); byteArray[i] = (byte) (high << 4 | low); k += 2; } return byteArray; }
字节数组转成16进制字符串
[code]/** * byte[]数组转换为16进制的字符串 * * @param bytes 要转换的字节数组 * @return 转换后的结果 */ private static String bytesToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(0xFF & bytes[i]); if (hex.length() == 1) { sb.append('0'); } sb.append(hex); } return sb.toString(); }
[code]/** * byte[]数组转换为16进制的字符串 * * @param data 要转换的字节数组 * @return 转换后的结果 */ public static final String byteArrayToHexString(byte[] data) { StringBuilder sb = new StringBuilder(data.length * 2); for (byte b : data) { int v = b & 0xff; if (v < 16) { sb.append('0'); } sb.append(Integer.toHexString(v)); } return sb.toString().toUpperCase(Locale.getDefault()); }
[code]/** * 字节数组转成16进制表示格式的字符串 * * @param byteArray 要转换的字节数组 * @return 16进制表示格式的字符串 **/ public static String toHexString(byte[] byteArray) { if (byteArray == null || byteArray.length < 1) throw new IllegalArgumentException("this byteArray must not be null or empty"); final StringBuilder hexString = new StringBuilder(); for (int i = 0; i < byteArray.length; i++) { if ((byteArray[i] & 0xff) < 0x10)//0~F前面不零 hexString.append("0"); hexString.append(Integer.toHexString(0xFF & byteArray[i])); } return hexString.toString().toLowerCase(); }
分享是一种美德,更是一种生活方式!!
也许你会说我是一个梦想者,但我不是唯一的一个。
悦分享,越快乐^_^
欢迎交流,转载请注明出处,谢谢!
相关文章推荐
- Java设计模式——外观模式
- java核心技术 要点笔记1
- Java异常处理总结
- 利用javaMail发送邮件
- JDK动态代理实现原理--转载
- Java设计模式——桥接模式
- 从Java转学IOS第一天
- java 类加载过程
- 剖析java.lang.OutOfMemoryError: Java heap space产生原因及解决方法
- 基于 Java 2 运行时安全模型的线程协作--转
- 深入探讨 java.lang.ref 包
- Java 类的热替换---转载
- Java 理论与实践: 用弱引用堵住内存泄漏---转载
- 在 Java 中高效使用锁的技巧--转载
- 关于Spring 中的事务
- Java EE (12) -- 系统质量的分类
- List存储Java对象
- Java关键字this、super使用总结
- 全面分析Java的垃圾回收机制
- Java并发编程实践 -- Executor框架