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}
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}
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); }
Si vous aimez la Goyave, vous pouvez utiliser ses Ints
classe:
Pour int
→ byte[]
, 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
.
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 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.