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

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

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

烙印99 2019-07-27 15:15:34
在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 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

一个简单的方法是检查输出了多少位数。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-28
?
HUX布斯

TA贡献1876条经验 获得超6个赞

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

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


查看完整回答
反对 回复 2019-07-28
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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

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

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


查看完整回答
反对 回复 2019-07-28
  • 3 回答
  • 0 关注
  • 572 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号