java - बाइट सरणी के लिए जावा पूर्णांक




arrays integer (8)

कक्षा org.apache.hadoop.hbase.util.Bytes में आसान बाइट [] रूपांतरण विधियों का एक गुच्छा है, लेकिन हो सकता है कि आप इस उद्देश्य के लिए अपने प्रोजेक्ट में संपूर्ण एचबीएएस जार जोड़ना न चाहें। यह आश्चर्य की बात है कि न केवल इस तरह की विधि जेडीके से AFAIK गायब है, बल्कि कॉमन्स io जैसे स्पष्ट libs से भी।

मुझे एक पूर्णांक मिला: 1695609641 9 1695609641

जब मैं विधि का उपयोग करता हूं:

String hex = Integer.toHexString(1695609641);
system.out.println(hex); 

देता है:

6510f329

लेकिन मुझे एक बाइट सरणी चाहिए:

byte[] bytearray = new byte[] { (byte) 0x65, (byte)0x10, (byte)0xf3, (byte)0x29};

मैं इसे कैसे बना सकता हूं?



जावा एनआईओ के ByteBuffer का उपयोग करना बहुत आसान है:

byte[] bytes = ByteBuffer.allocate(4).putInt(1695609641).array();

for (byte b : bytes) {
   System.out.format("0x%x ", b);
}

उत्पादन:

0x65 0x10 0xf3 0x29 

नीचे दिए गए भाग कम से कम यूडीपी पर एक int भेजने के लिए काम करते हैं।

int बाइट सरणी:

public byte[] intToBytes(int my_int) throws IOException {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutput out = new ObjectOutputStream(bos);
    out.writeInt(my_int);
    out.close();
    byte[] int_bytes = bos.toByteArray();
    bos.close();
    return int_bytes;
}

int से बाइट सरणी:

public int bytesToInt(byte[] int_bytes) throws IOException {
    ByteArrayInputStream bis = new ByteArrayInputStream(int_bytes);
    ObjectInputStream ois = new ObjectInputStream(bis);
    int my_int = ois.readInt();
    ois.close();
    return my_int;
}

Guava का उपयोग करना:

byte[] bytearray = Ints.toByteArray(1695609641);

BigInteger.valueOf(1695609641).toByteArray()


byte[] conv = new byte[4];
conv[3] = (byte) input & 0xff;
input >>= 8;
conv[2] = (byte) input & 0xff;
input >>= 8;
conv[1] = (byte) input & 0xff;
input >>= 8;
conv[0] = (byte) input;

integer & 0xFF

पहले बाइट के लिए

(integer >> 8) & 0xFF

दूसरे और लूप आदि के लिए, एक preallocated बाइट सरणी में लिखना। दुर्भाग्य से, थोड़ा गन्दा।







byte