如何将字节数组转换为Java中的十六进制字符串?

问题:

我有一个填充十六进制数字的字节数组,打印它简单的方式是毫无意义的,因为有很多不可打印的元素。我需要的是以下形式的精确的十六进制代码:3a5f771c

回答:

从讨论here,特别是this回答,这是我目前使用的功能:

private final static char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    for ( int j = 0; j < bytes.length; j++ ) {
        int v = bytes&#91;j&#93; &amp; 0xFF;
        hexChars&#91;j * 2&#93; = hexArray&#91;v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v &amp; 0x0F];
    }
    return new String(hexChars);
}

我自己的小基准(百万字节千次,256字节1000万次)表明它比任何其他替代方案要快得多,大约是长阵列的一半。与我所提出的答案相比,如果讨论中提到的那样,切换到按位操作 – 削减了大约20%的长阵列时间。 (编辑:当我说它比替代品更快时,我的意思是讨论中提供的替代代码,性能相当于Commons Codec,它使用非常相似的代码。)

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to convert a byte array to a hex string in Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

4 + 5 =