gpt4 book ai didi

java - BigInteger 到 byte[]

转载 作者:太空狗 更新时间:2023-10-29 22:50:08 26 4
gpt4 key购买 nike

我需要转换 Java BigInteger实例到它的值(以字节为单位)。从 API 中,我获得了此方法 toByteArray(),它返回一个 byte[],其中包含此 BigInteger 的二进制补码表示形式。

因为我所有的数字都是正 128 位(16 字节)整数,所以我不需要 2 的补码形式给我 128 位 + 符号位(129 位)...

有没有办法直接从 BigInteger 获取标准(没有 2 的补码形式)表示?

如果不是,我如何右移整个 byte[17] 数组以丢失符号位以获得 byte[16] 数组?

最佳答案

你根本不需要移动。符号位是字节数组中最重要的(= 最左边的)位。由于您知道您的数字将始终为正数,因此它保证为 0。但是,数组作为一个整体是右对齐的。

所以有两种情况:你最左边的字节是0x00还是不是。如果它是 0x00,你可以安全地删除它:

byte[] array = bigInteger.toByteArray();
if (array[0] == 0) {
byte[] tmp = new byte[array.length - 1];
System.arraycopy(array, 1, tmp, 0, tmp.length);
array = tmp;
}

如果它不是 0,那么你不能删除它 - 但你的数组已经是你想要的表示形式,所以你不必做任何事情。

上面的代码应该适用于这两种情况。

关于java - BigInteger 到 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4407779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com