BigInteger和Byte数组相互转换

2020-12-07  本文已影响0人  gigglesoso

最近在项目中涉及到一个需求,需要将一个大整型BigInteger转换为byte数组,同时需要保证byte数组能再转换回相应的大整型BigInteger;

            // byte数组转换为10进制字符串,获取正值
            BigInteger bi = new BigInteger(1, result);

这里参数值1表示转换为正的BigInteger,其中result是byte[];这里byte数组是一个固定24个长度的数组;

以下代码是将BigInteger转换为byte数组;

    public static byte[] toByteArray(BigInteger bi) {
        byte[] array = bi.toByteArray();
        // 这种情况是转换的array超过25位
        if (array[0] == 0) {
            byte[] tmp = new byte[array.length - 1];
            System.arraycopy(array, 1, tmp, 0, tmp.length);
            array = tmp;
        }
        // 假如转换的byte数组少于24位,则在前面补齐0
        if (array.length < 24) {
            byte[] tmp = new byte[24];
            System.arraycopy(array, 0, tmp, 24 - array.length, array.length);
            array = tmp;
        }
        return array;
    }

这里byte数组转换回BigInteger时,若超过24位,则是多生成了符号位,这里做剔除;假如生成的byte数组少于24位,则证明高位的值是0,这里做长度补充,以保证转换为的是原来的值。

上一篇下一篇

猜你喜欢

热点阅读