为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

呼如林 2019-07-16 18:13:13

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

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

byte messageDigest[] = algorithm.digest();     StringBuffer hexString = new StringBuffer();for (int i=0;i<messageDigest.length;i++) {
    hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
    }

但是,由于toHexString显然掉下了前导零,所以它不太起作用。那么,从字节数组到保持前导零的十六进制字符串,最简单的方法是什么?


查看完整描述

3 回答

?
慕的地10843

一个简单的方法是检查输出了多少位数。Integer.toHexString()并在每个字节中添加一个前导零(如果需要的话)。就像这样:

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();}


查看完整回答
反对 回复 2019-07-16
?
凤凰求蛊

查看ApacheCommonsCodecHex.encodeHex..返回类型是char[],可以转换为String..因此:

import org.apache.commons.codec.binary;Hex.encodeHexString(messageDigest);


查看完整回答
反对 回复 2019-07-16
?
ABOUTYOU

你可以用下面这个。我用前导零字节和初始负字节进行了测试。

public static String toHex(byte[] bytes) {
    BigInteger bi = new BigInteger(1, bytes);
    return String.format("%0" + (bytes.length << 1) + "X", bi);}

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


查看完整回答
反对 回复 2019-07-16

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信