Converter inteiro em array de bytes (Java)

O que é uma maneira rápida de converter um Integer em uma Byte Array ?

por exemplo, 0xAABBCCDD => {AA, BB, CC, DD}

Dê uma olhada na class ByteBuffer .

 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(); 

Definir a ordem de bytes garante que o result[0] == 0xAA , result[1] == 0xBB , result[2] == 0xCC e result[3] == 0xDD .

Ou, alternativamente, você poderia fazer isso manualmente:

 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; } 

A class ByteBuffer foi projetada para tarefas de mãos sujas. Na verdade, o private java.nio.Bits define esses methods auxiliares usados ​​pelo 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); } 

Usando o BigInteger :

 private byte[] bigIntToByteArray( final int i ) { BigInteger bigInt = BigInteger.valueOf(i); return bigInt.toByteArray(); } 

Usando o DataOutputStream :

 private byte[] intToByteArray ( final int i ) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); dos.writeInt(i); dos.flush(); return bos.toByteArray(); } 

Usando o ByteBuffer :

 public byte[] intToBytes( final int i ) { ByteBuffer bb = ByteBuffer.allocate(4); bb.putInt(i); return bb.array(); } 

use essa function que funciona para mim

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

ele traduz o int em um valor de byte

Se você gosta de Guava , você pode usar sua class Ints :


Para intbyte[] , use toByteArray() :

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

O resultado é {0xAA, 0xBB, 0xCC, 0xDD} .


Seu reverso é 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); 

O resultado é 0xAABBCCDD .

Você pode usar o BigInteger :

De inteiros:

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

A matriz retornada é do tamanho necessário para representar o número, portanto, pode ser do tamanho 1, para representar 1, por exemplo. No entanto, o tamanho não pode ter mais de quatro bytes se um int for passado.

De cordas:

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

No entanto, você precisará observar, se o primeiro byte for maior 0x7F (como é neste caso), onde BigInteger inseriria um byte 0x00 para o início da matriz. Isso é necessário para distinguir entre valores positivos e negativos.

 static byte[] toBytes(int val, int bufferSize) { byte[] result = new byte[bufferSize]; for(int i = bufferSize - 1; i >= 0; i--) { result[i] = (byte) (val /*>> 0*/); val = (val >> 8); } return result; } 

// by jordaoesa e samirtf – melhores amigas JFL <3

É a minha solução:

 public void getBytes(int val) { byte[] bytes = new byte[Integer.BYTES]; for (int i = 0;i < bytes.length; i ++) { int j = val % Byte.MAX_VALUE; bytes[i] = (j == 0 ? Byte.MAX_VALUE : j); } } 

Eu não testei este código - teste, por favor.
Escreva o resultado nos comentários

Isso ajudará você

import java.nio.ByteBuffer; import java.util.Arrays;

 public class MyClass { public static void main(String args[]) { byte [] hbhbytes = ByteBuffer.allocate(4).putInt(16666666).array(); System.out.println(Arrays.toString(hbhbytes)); } }