Cómo convertir entero grande a la siguiente matriz de bytes forma en Java:
Grandes números enteros se codifican como una secuencia de bytes de ocho bits, en notación de complemento a dos, transmite big-endian. Si la longitud de la secuencia no es un múltiplo de ocho bytes, entonces enteros grandes se rellenará con el número mínimo de bytes que llevan signo extendido para que la longitud de un múltiplo de ocho bytes.
Esto es para estar en un acuerdo con el protocolo KMIP , sección 9.1.1.4 Elemento Valor
Por lo que yo sé, no hay ninguna funcionalidad proporcionada por el relleno de la BigInteger
API, por lo que tiene que hacer el relleno usted mismo:
Para una BigInteger bigInt
, el uso
byte[] array = bigInt.toByteArray();
int len = array.length, len8 = len+7 & ~7;
if(len != len8) {
int pad = len8 - len;
byte[] nArray = new byte[len8];
if(bigInt.signum() < 0) Arrays.fill(nArray, 0, pad, (byte)-1);
System.arraycopy(array, 0, nArray, pad, len);
array = nArray;
}
- En primer lugar, utilizar
toByteArray()
para obtener una matriz de bytes - calcular el siguiente múltiplo de ocho para la longitud de la matriz
- Si este número no es idéntica a la longitud, es necesario el relleno
- asignar una matriz del tamaño requerido
- llenar el relleno con
-1
(extensión de signo) cuando es negativo (que ya tiene los ceros necesarios en el otro caso) - copiar los bytes originales
Tenga en cuenta que una señal extendida gama acolchada todavía es compatible con el BigInteger(byte[])
constructor, por lo que una assert bigInt.equals(new BigInteger(array));
después de la operación nunca debe fallar.