Convertir el valor entero superior a ocho bytes de bits (2s complementan big endian) secuencia que es múltiplo de 8 en Java

Vishnu:

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

Holger:

Por lo que yo sé, no hay ninguna funcionalidad proporcionada por el relleno de la BigIntegerAPI, 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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=173227&siteId=1
Recomendado
Clasificación