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

在Java中,如何将字节数组转换为十六进制数字字符串,同时保留前导零?
EN

Stack Overflow用户
提问于 2008-12-01 20:24:43
回答 27查看 192.3K关注 0票数 169

我正在使用一些用于生成md5散列的示例java代码。其中一部分将结果从字节转换为十六进制数字的字符串:

代码语言:javascript
复制
byte messageDigest[] = algorithm.digest();     
StringBuffer hexString = new StringBuffer();
for (int i=0;i<messageDigest.length;i++) {
    hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
    }

然而,这并不是很有效,因为toHexString显然省略了前导零。那么,从字节数组到保持前导零的十六进制字符串的最简单方法是什么?

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2008-12-01 20:32:20

一种简单的方法是检查Integer.toHexString()输出了多少位数,如果需要,在每个字节中添加一个前导零。如下所示:

代码语言:javascript
复制
public static String toHexString(byte[] bytes) {
    StringBuilder hexString = new StringBuilder();

    for (int i = 0; i < bytes.length; i++) {
        String hex = Integer.toHexString(0xFF & bytes[i]);
        if (hex.length() == 1) {
            hexString.append('0');
        }
        hexString.append(hex);
    }

    return hexString.toString();
}
票数 112
EN

Stack Overflow用户

发布于 2008-12-01 22:12:58

查看来自Apache Commons CodecHex.encodeHexString

代码语言:javascript
复制
import org.apache.commons.codec.binary.Hex;

String hex = Hex.encodeHexString(bytes);
票数 138
EN

Stack Overflow用户

发布于 2009-06-03 10:09:07

你可以使用下面的一个。我用前导零字节和初始负字节测试了这一点

代码语言:javascript
复制
public static String toHex(byte[] bytes) {
    BigInteger bi = new BigInteger(1, bytes);
    return String.format("%0" + (bytes.length << 1) + "X", bi);
}

如果需要小写十六进制数字,请在格式字符串中使用"x"

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

https://stackoverflow.com/questions/332079

复制
相关文章

相似问题

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