我有一个用十六进制数字填充的字节数组,用简单的方法打印它是毫无意义的,因为有很多不可打印的元素。我需要的是以下形式的确切十六进制代码: 3a5f771c
原文由 Andre 发布,翻译遵循 CC BY-SA 4.0 许可协议
Apache Commons Codec 库有一个 Hex 类来完成这种类型的工作。
import org.apache.commons.codec.binary.Hex;
String foo = "I am a string";
byte[] bytes = foo.getBytes();
System.out.println( Hex.encodeHexString( bytes ) );
原文由 chooban 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
从 这里 的讨论,尤其是 这个 答案,这是我目前使用的功能:
我自己的小型基准测试(一千次一百万字节,一千万次 256 字节)表明它比任何其他替代方案都要快得多,大约是长数组的一半时间。与我从中得到的答案相比,切换到按位运算——正如讨论中所建议的——将长数组的时间缩短了 20%。 (编辑:当我说它比替代方案更快时,我的意思是讨论中提供的替代代码。性能相当于 Commons Codec,它使用非常相似的代码。)
2k20 版本,关于 Java 9 紧凑字符串: