जवाबों:
बाइटबफ़र वर्ग पर एक नज़र ।
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();
बाइट क्रम सुनिश्चित की स्थापना कि result[0] == 0xAA
, result[1] == 0xBB
, result[2] == 0xCC
और result[3] == 0xDD
।
या वैकल्पिक रूप से, आप इसे मैन्युअल रूप से कर सकते हैं:
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;
}
ByteBuffer
वर्ग हालांकि इस तरह के गंदे हाथों कार्यों के लिए डिजाइन किया गया था। वास्तव में निजी java.nio.Bits
इन सहायक विधियों को परिभाषित करता है जिनका उपयोग किया जाता है 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); }
का उपयोग कर BigInteger
:
private byte[] bigIntToByteArray( final int i ) {
BigInteger bigInt = BigInteger.valueOf(i);
return bigInt.toByteArray();
}
का उपयोग कर 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();
}
का उपयोग कर ByteBuffer
:
public byte[] intToBytes( final int i ) {
ByteBuffer bb = ByteBuffer.allocate(4);
bb.putInt(i);
return bb.array();
}
ByteBuffer
अधिक सहज ज्ञान युक्त है अगर आप की तुलना में 2 ^ 31 को पूर्णांक में अधिक से अधिक के साथ काम कर रहे हैं - 1.
इस फ़ंक्शन का उपयोग करें यह मेरे लिए काम करता है
public byte[] toByteArray(int value) {
return new byte[] {
(byte)(value >> 24),
(byte)(value >> 16),
(byte)(value >> 8),
(byte)value};
}
यह int को बाइट मान में अनुवादित करता है
यदि आप अमरूद पसंद करते हैं , तो आप इसके Ints
वर्ग का उपयोग कर सकते हैं :
के लिए int
→ byte[]
, उपयोग toByteArray()
:
byte[] byteArray = Ints.toByteArray(0xAABBCCDD);
परिणाम है {0xAA, 0xBB, 0xCC, 0xDD}
।
इसका उल्टा है fromByteArray()
या 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);
परिणाम है 0xAABBCCDD
।
आप उपयोग कर सकते हैं BigInteger
:
इंटेगर से:
byte[] array = BigInteger.valueOf(0xAABBCCDD).toByteArray();
System.out.println(Arrays.toString(array))
// --> {-86, -69, -52, -35 }
लौटाया गया सरणी आकार का है जो संख्या का प्रतिनिधित्व करने के लिए आवश्यक है, इसलिए यह आकार 1 का हो सकता है, उदाहरण के लिए 1 का प्रतिनिधित्व करने के लिए। हालाँकि, यदि कोई इंट पास है, तो आकार चार बाइट्स से अधिक नहीं हो सकता है।
स्ट्रिंग्स से:
BigInteger v = new BigInteger("AABBCCDD", 16);
byte[] array = v.toByteArray();
हालांकि, आपको यह देखने की आवश्यकता होगी, यदि पहला बाइट अधिक है 0x7F
(जैसा कि इस मामले में है), जहां BigInteger सरणी की शुरुआत में 0x00 बाइट सम्मिलित करेगा। सकारात्मक और नकारात्मक मूल्यों के बीच अंतर करने के लिए यह आवश्यक है।
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);
यहां एक तरीका है जो काम को सही तरीके से करना चाहिए।
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;
};
यह मेरा समाधान है:
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);
}
}
इसके अलावा String
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;
}