美文网首页
BigInteger和Byte数组相互转换

BigInteger和Byte数组相互转换

作者: gigglesoso | 来源:发表于2020-12-07 14:45 被阅读0次

    最近在项目中涉及到一个需求,需要将一个大整型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,这里做长度补充,以保证转换为的是原来的值。

    相关文章

      网友评论

          本文标题:BigInteger和Byte数组相互转换

          本文链接:https://www.haomeiwen.com/subject/aqyjuktx.html