首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中将字节数组转换为十六进制字符串?

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

Stack Overflow用户
提问于 2018-06-13 01:01:38
回答 2查看 0关注 0票数 0

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

EN

回答 2

Stack Overflow用户

发布于 2018-06-13 09:03:03

这是我目前使用的函数:

代码语言:txt
复制
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%。

票数 0
EN

Stack Overflow用户

发布于 2018-06-13 10:49:21

使用DatatypeConverter.printHexBinary()。例如:

代码语言:txt
复制
byte bytes[] = {(byte)0, (byte)0, (byte)134, (byte)0, (byte)61};
System.out.println(javax.xml.bind.DatatypeConverter.printHexBinary(bytes));

将导致:

代码语言:txt
复制
000086003D

这将检索十六进制字符串,表示带有前导零的字节数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档