我有一个关于Java中int / long转换的字节的查询。
有:
如何存储超过8个字节的值 以及Java将如何表示这一点(例如:内存中的8 +字节值)?
答案 0 :(得分:0)
BigInteger就是为此而设计的。在内部,它表示具有(可变长度)向量的数字,可以将其视为多项式。只要有足够的可用内存,它就可以有效地操纵任意大小的整数。其他语言有类似的结构或库;例如,GMP库遵循类似的方法。
请注意,尽管BigInteger
可以从byte[]
补码中构建,并且可以再次转换为byte[]
s,但在内部他们使用的更多 - 高效int[]
表示。如有疑问,read the source。
示例代码如下:
import java.math.*;
public class T {
public static void main(String[] args) {
for (String s: args) {
// build from base-16 string representation
BigInteger bi = new BigInteger(s, 16);
System.out.println("The decimal representation of \n\t"
+ s + " is \n\t" + bi);
// (bi.toString() generates base-10 strings)
}
}
}
现在编译&运行:
javac T.java && java T 8df0c57980d7fa44e3a7286cfd9a4589c5eb1eb0
按预期输出:
The decimal representation of
8df0c57980d7fa44e3a7286cfd9a4589c5eb1eb0 is
810337079999566280018410685437385308775358602928