java 16进制转换10进制

通常,在java里面,将16进制字符转换成10进制数字,可以这么写:

1
2
3
4
String s = "b81f7";
long r = Long.parseLong(s, 16);
System.out.println(r);
//输出 754167

但是s如果是比较长的数,如:0000000000000bae09a7a393a8acded75aa67e46cb81f7acaa5ad94f9eacd103
那么就会报如下错误:

1
2
3
Exception in thread "main" java.lang.NumberFormatException: For input string: "0000000000000bae09a7a393a8acded75aa67e46cb81f7acaa5ad94f9eacd103"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Long.parseLong(Long.java:592)

原因是转换后的10进制数,超出了Long的最大值。

所以我们的正确做法应该是使用BigInteger:

1
2
3
4
String s = "0000000000000bae09a7a393a8acded75aa67e46cb81f7acaa5ad94f9eacd103";
BigInteger r = new BigInteger(s, 16);
System.out.println(r);
//输出 18768770924787611988401014025437350240749174288167713091932419
  • 本文作者:二当家的
  • 本文链接: 2019/12/01/java-16进制转换10进制/
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
  • 彩蛋: 左边Overview微信公众号二维码,扫描它获取更多技术信息