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

标签 java bytearray hex

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

最佳答案

从讨论 here ,尤其是 this 答案,这是我目前使用的功能:

private static final char[] HEX_ARRAY = "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[j] & 0xFF;
        hexChars[j * 2] = HEX_ARRAY[v >>> 4];
        hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
    }
    return new String(hexChars);
}

我自己的小型基准测试(一千次一百万字节,一千万次 256 字节)表明它比任何其他替代方案都快得多,大约是长数组的一半。与我从中得到的答案相比,切换到按位运算——正如讨论中所建议的——将长数组的时间缩短了 20%。 (编辑:当我说它比替代代码更快时,我指的是讨论中提供的替代代码。性能相当于 Commons Codec,它使用非常相似的代码。)

2k20 版本,关于 Java 9 紧凑字符串:

private static final byte[] HEX_ARRAY = "0123456789ABCDEF".getBytes(StandardCharsets.US_ASCII);
public static String bytesToHex(byte[] bytes) {
    byte[] hexChars = new byte[bytes.length * 2];
    for (int j = 0; j < bytes.length; j++) {
        int v = bytes[j] & 0xFF;
        hexChars[j * 2] = HEX_ARRAY[v >>> 4];
        hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
    }
    return new String(hexChars, StandardCharsets.UTF_8);
}

关于java - 如何在 Java 中将字节数组转换为十六进制字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9655181/

相关文章:

c++ - C/C++ : Inherent ambiguity of "\xNNN" format in literal strings

java - (高中Java作业帮助)英文字母转摩尔斯电码的困惑

java - 如何在 Java 中将字节数组转换为十六进制格式

java - 如何使用 Netbean IDE 在 Java 库中搜索类?

java - 如何播放字节数组中的视频?

actionscript-3 - 如何在Adobe Flex中使用bitmapData的setPixels(rectangle, byteArray)方法

c++ - 将 unsigned char 数组打印为十六进制

java - 从套接字获取十六进制值并转换为十进制

java - 我该怎么做才能使 jar /类更小?

Java CBC 解密有效,但 CTR 失败