Kam*_*ami 15 java byte biginteger
我需要将Java BigInteger实例转换为以字节为单位的值.从API中,我得到了这个方法toByteArray()
,它返回一个包含这个BigInteger的二进制补码表示的byte [].
因为我的所有数字都是正128位(16字节)整数,所以我不需要2位补码形式给我128位+符号位(129位)......
有没有办法直接从BigInteger获得标准(没有2的补码形式)表示?
如果没有,我怎么能正确移位整个byte [17]数组以丢失符号位以获得一个byte [16]数组?
Tho*_*mas 27
你根本不需要转移.符号位是字节数组中最重要的(=最左边)位.由于您知道您的数字将始终为正数,因此保证为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;
}
Run Code Online (Sandbox Code Playgroud)
如果它不是0,那么你不能删除它 - 但你的数组已经在你想要的表示中,所以你不必做任何事情.
上述代码应适用于这两种情况.
归档时间: |
|
查看次数: |
33384 次 |
最近记录: |