如何获取十六进制字符串的整数值

时间:2017-04-12 03:24:59

标签: java

我的代码如下:

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值,我不知道发生了什么。

2 个答案:

答案 0 :(得分:1)

该输出来自于在catch块中打印异常消息。

抛出异常是因为您尝试解析的数字太大而无法容纳long数据类型。

答案 1 :(得分:1)

您创建输入字符串的md5哈希值。

那哈希就是47 ......价值!

而且这个值太大了,无法适应long或int变量!因此,你得到一个例外,并且catch块开始了。

长话短说:退后一步,重新思考这种方法应该做什么。因为它不能以这种方式工作。

除此之外:解析十六进制字符串时,必须使用

parseLong(input, 16)

为了告诉java我们,它应该是一个十六进制数。

我的直觉是:你自己负担过重。您缺少非常基本的Java语言元素的知识,但您打算使用MessageDigest等高级概念。

编辑:给出你的评论:阅读BigInteger类。那个提供了保存任意大整数的手段。