我有一个字节数组,填充十六进制数字并打印它-简单的方法是没有意义的,因为有许多不可打印的元素。我需要的是确切的六进制代码,形式是:3a5f771c
发布于 2018-06-13 09:03:03
这是我目前使用的函数:
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[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
我自己的小基准测试(千次一百万字节,一千万次256字节)显示,它比其他任何替代方案都快得多,大约是长数组的一半。与我所得到的答案相比,切换到按位操作-正如讨论中所建议的-将长数组的时间减少了大约20%。
发布于 2018-06-13 10:49:21
使用DatatypeConverter.printHexBinary()
。例如:
byte bytes[] = {(byte)0, (byte)0, (byte)134, (byte)0, (byte)61};
System.out.println(javax.xml.bind.DatatypeConverter.printHexBinary(bytes));
将导致:
000086003D
这将检索十六进制字符串,表示带有前导零的字节数组。
https://stackoverflow.com/questions/-100001378
复制相似问题