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