如何使这项工作?
long l = Long.valueOf(Integer.parseInt(DatatypeConverter.printHexBinary(myBytes), 16));
textField.setText("" + l);
投掷NumberFormatException
因为它太长了。
答案 0 :(得分:3)
您的问题可能是您尝试先将号码转换为int
,然后转换为long
。这仅适用于最多约20亿的数字,因为这是int
中最大的数字。
如果您的号码符合long
(最多约19位),而不是int
,那么您应该使用parseLong
Long
方法} class,而不是parseInt
。
long myLong = Long.parseLong(myHexString, 16);
但是,如果long
的值太大,则您需要BigInteger
类。
BigInteger myInteger = new BigInteger(myHexString, 16);
仔细选择。 long
值往往比BigInteger
值表现得更好,因此如果您知道您的价值无法超过最大可能值long
,那么您可能希望选择long
。
答案 1 :(得分:1)
请在这种情况下使用BigInteger。它的性能很慢,但完全解决了目的
BigInteger的构造函数接受String并创建实例,其值传递为String:
BigInteger(String val)
您可以按照此处的说明操作: https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html