Câu trả lời:
Hãy xem lớp 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();
Thiết này để thỏa mãn thứ tự byte rằng result[0] == 0xAA
, result[1] == 0xBB
, result[2] == 0xCC
và result[3] == 0xDD
.
Hoặc cách khác, bạn có thể làm điều đó bằng tay:
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;
}
Các ByteBuffer
lớp được thiết kế cho các nhiệm vụ tay bẩn như vậy mặc dù. Trong thực tế, private java.nio.Bits
định nghĩa các phương thức trợ giúp này được sử dụng bởi 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); }
Sử dụng BigInteger
:
private byte[] bigIntToByteArray( final int i ) {
BigInteger bigInt = BigInteger.valueOf(i);
return bigInt.toByteArray();
}
Sử dụng 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();
}
Sử dụng ByteBuffer
:
public byte[] intToBytes( final int i ) {
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(i);
return bb.array();
}
ByteBuffer
trực quan hơn nếu bạn giao dịch với số nguyên lớn hơn 2 ^ 31 - 1.
sử dụng chức năng này nó hoạt động cho tôi
public byte[] toByteArray(int value) {
return new byte[] {
(byte)(value >> 24),
(byte)(value >> 16),
(byte)(value >> 8),
(byte)value};
}
nó dịch int thành một giá trị byte
Nếu bạn thích ổi , bạn có thể sử dụng Ints
lớp của nó :
Đối với int
→ byte[]
, sử dụng toByteArray()
:
byte[] byteArray = Ints.toByteArray(0xAABBCCDD);
Kết quả là {0xAA, 0xBB, 0xCC, 0xDD}
.
Đảo ngược của nó là fromByteArray()
hoặc 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);
Kết quả là 0xAABBCCDD
.
Bạn có thể sử dụng BigInteger
:
Từ số nguyên:
byte[] array = BigInteger.valueOf(0xAABBCCDD).toByteArray();
System.out.println(Arrays.toString(array))
// --> {-86, -69, -52, -35 }
Mảng trả về có kích thước cần thiết để đại diện cho số, vì vậy nó có thể có kích thước 1, để đại diện cho 1 chẳng hạn. Tuy nhiên, kích thước không thể nhiều hơn bốn byte nếu một int được truyền.
Từ chuỗi:
BigInteger v = new BigInteger("AABBCCDD", 16);
byte[] array = v.toByteArray();
Tuy nhiên, bạn sẽ cần coi chừng, nếu byte đầu tiên cao hơn 0x7F
(như trong trường hợp này), trong đó BigInteger sẽ chèn một byte 0x00 vào đầu mảng. Điều này là cần thiết để phân biệt giữa các giá trị tích cực và tiêu cực.
rất dễ dàng với 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);
Đây là một phương pháp nên làm công việc vừa phải.
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;
};
Đó là giải pháp của tôi:
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);
}
}
Ngoài ra String
phương pháp 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;
}