143 votes

Convertir un entier en tableau d'octets (Java)

comme Java ne fournit pas de moyen par défaut de le faire,

Qu'est-ce qu'un moyen rapide de convertir un entier en un tableau d'octets?

par exemple 0xAABBCCDD => {AA, BB, CC, DD}

246voto

Gregory Pakosz Points 35546

Jetez un oeil à la ByteBuffer classe.

ByteBuffer b = ByteBuffer.allocate(4);
//b.order(ByteOrder.BIG_ENDIAN); // optional, the initial order of a byte buffer is always BIG_ENDIAN.
b.putInt(0xAABBCCDD);

byte[] result = b.array();

Réglage de l'ordre des octets assure result[0] == 0xAA, result[1] == 0xBB, result[2] == 0xCC et result[3] == 0xDD.

Ou sinon, vous pouvez le faire manuellement:

byte[] toBytes(int i)
{
  byte[] result = new byte[4];

  result[0] = (byte) (i >> 24);
  result[1] = (byte) (i >> 16);
  result[2] = (byte) (i >> 8);
  result[3] = (byte) (i /*>> 0*/);

  return result;
}

L' ByteBuffer de la classe a été conçu pour de telles mains sales tâches. En fait, le privé java.nio.Bits définit ces méthodes d'assistance, qui sont utilisés par ByteBuffer.putInt():

private static byte int3(int x) { return (byte)(x >> 24); }
private static byte int2(int x) { return (byte)(x >> 16); }
private static byte int1(int x) { return (byte)(x >>  8); }
private static byte int0(int x) { return (byte)(x >>  0); }

40voto

Pascal Thivent Points 295221

À l’aide de `` :

À l’aide de `` :

À l’aide de `` :

30voto

daz Points 121

utiliser cette fonction ça marche pour moi

 public byte[] intToByteArray(int value) {
    return new byte[] {
            (byte)(value >>> 24),
            (byte)(value >>> 16),
            (byte)(value >>> 8),
            (byte)value};
}
 

il traduit l'int en une valeur d'octet

16voto

Pang Points 2345

Si vous aimez la Goyave, vous pouvez utiliser ses Ints classe:


Pour intbyte[], utilisez toByteArray():

byte[] byteArray = Ints.toByteArray(0xAABBCCDD);

Le résultat est {0xAA, 0xBB, 0xCC, 0xDD}.


Son inverse est - fromByteArray() ou fromBytes():

int intValue = Ints.fromByteArray(new byte[]{(byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD});
int intValue = Ints.fromBytes((byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD);

Le résultat est 0xAABBCCDD.

8voto

notnoop Points 30218

Vous pouvez utiliser BigInteger:

À Partir De Nombres Entiers:

byte[] array = BigInteger.valueOf(0xAABBCCDD).toByteArray();
System.out.println(Arrays.toString(array))
// --> {-86, -69, -52, -35 }

Le tableau renvoyé est de la taille de ce qui est nécessaire pour représenter le nombre, de sorte qu'il pourrait être de taille 1, pour représenter 1 par exemple. Cependant, la taille ne peut pas être plus de quatre octets si un int est passé.

À Partir De Chaînes:

BigInteger v = new BigInteger("AABBCCDD", 16);
byte[] array = v.toByteArray();

Toutefois, vous aurez besoin de regarder, si le premier octet est supérieur 0x7F (comme dans ce cas), où BigInteger insérez un 0x00 octet pour le début du tableau. C'est nécessaire de faire la distinction entre valeurs positives et négatives.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X