Java - 将20个字节的值转换为基数为10的数字

时间:2015-04-16 06:46:30

标签: java bytearray

我有一个关于Java中int / long转换的字节的查询。

有:

  • Integer的4字节
  • 长的8字节。

如何存储超过8个字节的值 以及Java将如何表示这一点(例如:内存中的8 +字节值)?

1 个答案:

答案 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