猿问

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

在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显然掉下了前导零,所以它不太起作用。那么,从字节数组到保持前导零的十六进制字符串,最简单的方法是什么?



烙印99
浏览 573回答 3
3回答

呼如林

一个简单的方法是检查输出了多少位数。Integer.toHexString()并在每个字节中添加一个前导零(如果需要的话)。就像这样:public&nbsp;static&nbsp;String&nbsp;toHexString(byte[]&nbsp;bytes)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;hexString&nbsp;=&nbsp;new&nbsp;StringBuilder(); &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;bytes.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;hex&nbsp;=&nbsp;Integer.toHexString(0xFF&nbsp;&&nbsp;bytes[i]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hex.length()&nbsp;==&nbsp;1)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hexString.append('0'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hexString.append(hex); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hexString.toString();}

HUX布斯

查看ApacheCommonsCodecHex.encodeHex..返回类型是char[],可以转换为String..因此:import&nbsp;org.apache.commons.codec.binary;Hex.encodeHexString(messageDigest);

阿波罗的战车

你可以用下面这个。我用前导零字节和初始负字节进行了测试。public&nbsp;static&nbsp;String&nbsp;toHex(byte[]&nbsp;bytes)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;BigInteger&nbsp;bi&nbsp;=&nbsp;new&nbsp;BigInteger(1,&nbsp;bytes); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;String.format("%0"&nbsp;+&nbsp;(bytes.length&nbsp;<<&nbsp;1)&nbsp;+&nbsp;"X",&nbsp;bi);}如果您想要小写十六进制数字,请使用"x"在格式字符串中。
随时随地看视频慕课网APP

相关分类

Java
我要回答