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

Java中byte与16进制字符串的互相转换

2016-07-30 09:28 609 查看
转自 http://blog.csdn.net/redhat456/article/details/4492310

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 +
21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。

    同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上。

    根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。

 

 

[java] view
plain copy

 print?

/** 

 * Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。 

 * @param src byte[] data 

 * @return hex string 

 */     

public static String bytesToHexString(byte[] src){  

    StringBuilder stringBuilder = new StringBuilder("");  

    if (src == null || src.length <= 0) {  

        return null;  

    }  

    for (int i = 0; i < src.length; i++) {  

        int v = src[i] & 0xFF;  

        String hv = Integer.toHexString(v);  

        if (hv.length() < 2) {  

            stringBuilder.append(0);  

        }  

        stringBuilder.append(hv);  

    }  

    return stringBuilder.toString();  

}  

/** 

 * Convert hex string to byte[] 

 * @param hexString the hex string 

 * @return byte[] 

 */  

public static byte[] hexStringToBytes(String hexString) {  

    if (hexString == null || hexString.equals("")) {  

        return null;  

    }  

    hexString = hexString.toUpperCase();  

    int length = hexString.length() / 2;  

    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;  

}  

/** 

 * Convert char to byte 

 * @param c char 

 * @return byte 

 */  

 private byte charToByte(char c) {  

    return (byte) "0123456789ABCDEF".indexOf(c);  

}  

 

备注: 关于代码中第12行 int v = src[i] & 0xFF; 如有疑问,可以查看:java中byte转换int时为何与0xff进行与运算
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: