gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:37:45 24 4
gpt4 key购买 nike

我有一个填充了十六进制数字的字节数组,用简单的方法打印它是毫无意义的,因为有很多无法打印的元素。我需要的是以下形式的确切十六进制代码: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);
}

我自己的小型基准测试(100 万字节一千次,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/58059350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com