apa cara cepat untuk mengubah an Integer
menjadi Byte Array
?
misalnya 0xAABBCCDD => {AA, BB, CC, DD}
apa cara cepat untuk mengubah an Integer
menjadi Byte Array
?
misalnya 0xAABBCCDD => {AA, BB, CC, DD}
Jawaban:
Lihat kelas 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();
Mengatur memastikan urutan byte yang result[0] == 0xAA
, result[1] == 0xBB
, result[2] == 0xCC
dan result[3] == 0xDD
.
Atau sebagai alternatif, Anda dapat melakukannya secara manual:
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;
}
The ByteBuffer
kelas dirancang untuk tangan kotor tugas-tugas seperti sekalipun. Faktanya, privat java.nio.Bits
mendefinisikan metode pembantu yang digunakan oleh 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); }
Menggunakan BigInteger
:
private byte[] bigIntToByteArray( final int i ) {
BigInteger bigInt = BigInteger.valueOf(i);
return bigInt.toByteArray();
}
Menggunakan 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();
}
Menggunakan ByteBuffer
:
public byte[] intToBytes( final int i ) {
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(i);
return bb.array();
}
ByteBuffer
lebih intuitif jika Anda berurusan dengan int lebih besar dari 2 ^ 31 - 1.
gunakan fungsi ini, ini berfungsi untuk saya
public byte[] toByteArray(int value) {
return new byte[] {
(byte)(value >> 24),
(byte)(value >> 16),
(byte)(value >> 8),
(byte)value};
}
itu menerjemahkan int menjadi nilai byte
Jika Anda menyukai Jambu biji , Anda dapat menggunakan Ints
kelasnya:
Untuk int
→ byte[]
, gunakan toByteArray()
:
byte[] byteArray = Ints.toByteArray(0xAABBCCDD);
Hasilnya adalah {0xAA, 0xBB, 0xCC, 0xDD}
.
Kebalikannya adalah fromByteArray()
atau 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);
Hasilnya adalah 0xAABBCCDD
.
Anda dapat menggunakan BigInteger
:
Dari Integers:
byte[] array = BigInteger.valueOf(0xAABBCCDD).toByteArray();
System.out.println(Arrays.toString(array))
// --> {-86, -69, -52, -35 }
Array yang dikembalikan adalah ukuran yang diperlukan untuk mewakili angka, sehingga bisa berukuran 1, untuk mewakili 1 misalnya. Namun, ukurannya tidak boleh lebih dari empat byte jika int dilewatkan.
Dari Strings:
BigInteger v = new BigInteger("AABBCCDD", 16);
byte[] array = v.toByteArray();
Namun, Anda harus berhati-hati, jika byte pertama lebih tinggi 0x7F
(seperti dalam kasus ini), di mana BigInteger akan memasukkan 0x00 byte ke awal array. Ini diperlukan untuk membedakan antara nilai positif dan negatif.
sangat mudah dengan android
int i=10000;
byte b1=(byte)Color.alpha(i);
byte b2=(byte)Color.red(i);
byte b3=(byte)Color.green(i);
byte b4=(byte)Color.blue(i);
Berikut adalah metode yang akan melakukan pekerjaan dengan benar.
public byte[] toByteArray(int value)
{
final byte[] destination = new byte[Integer.BYTES];
for(int index = Integer.BYTES - 1; index >= 0; index--)
{
destination[i] = (byte) value;
value = value >> 8;
};
return destination;
};
Ini solusi saya:
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);
}
}
Juga String
metode y:
public void getBytes(int val) {
String hex = Integer.toHexString(val);
byte[] val = new byte[hex.length()/2]; // because byte is 2 hex chars
for (int i = 0; i < hex.length(); i+=2)
val[i] = Byte.parseByte("0x" + hex.substring(i, i+2), 16);
return val;
}