我的代码如下:
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] byteArray = md.digest(myString.getBytes("UTF-8"));
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
sb.append(Integer.toString((byteArray[i] & 0xff) + 0x100, 16).substring(1));
}
int n = (int) Long.parseLong(sb.toString());
System.out.println(n);
} catch (Exception e) {
System.out.println(e.getMessage());
}
出于某种原因,我一直得到输出:
For input string: "4739c5c11d833bb199c16ff95a92b267"
如果此代码中没有,我有print
语句......
我正在尝试获取上面的Hex字符串的int值,我不知道发生了什么。
答案 0 :(得分:1)
该输出来自于在catch块中打印异常消息。
抛出异常是因为您尝试解析的数字太大而无法容纳long
数据类型。
答案 1 :(得分:1)
您创建输入字符串的md5哈希值。
那哈希就是47 ......价值!
而且这个值太大了,无法适应long或int变量!因此,你得到一个例外,并且catch块开始了。
长话短说:退后一步,重新思考这种方法应该做什么。因为它不能以这种方式工作。
除此之外:解析十六进制字符串时,必须使用
parseLong(input, 16)
为了告诉java我们,它应该是一个十六进制数。
我的直觉是:你自己负担过重。您缺少非常基本的Java语言元素的知识,但您打算使用MessageDigest等高级概念。
编辑:给出你的评论:阅读BigInteger类。那个提供了保存任意大整数的手段。