Saya memiliki paket TCP yang mengirimkan banyak variabel yang tidak ditandatangani (mereka tidak ditandatangani karena menghemat ruang dan menggunakan batasan untuk ID unik), saya perlu mengubah data bit pendek yang tidak ditandatangani ini menjadi Integer di java.
Jadi pertanyaan saya adalah bagaimana cara mengubah byteArray[0 - 15] menjadi int?
Sunting:
Ini kode yang telah saya ubah:
ByteOrder order = ByteOrder.BIG_ENDIAN;
requestedDateType = new BigInteger(ByteBuffer.allocate(2).put(data, 8, 2).order(order).array()).intValue();
Buffer data yang masuk adalah:
bit 0 1 2 3 4 5 6 7 8 9
value 40 0 0 0 8 0 0 0 1 0
Data dikirim sebagai Little Endian. Saya berasumsi karena BigInteger berasumsi besar, saya perlu mengonversinya. Namun baik Pesanan besar maupun kecil memberi saya nilai yang sama sebagai imbalannya.
Saya berharap mendapatkan 1 untuk nilai requestedDateType
namun saya mendapatkan 256. Bagaimana cara mengisi dua byte yang hilang untuk memastikan itu memberi saya 0000 0000 0000 0001 bukannya 0000 0001 0000 0000
Sunting 2:
Sudahlah. Mengubah kode menjadi ini:
ByteBuffer bb = ByteBuffer.allocate(2);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(data, 8, 2);
int value = ((int)bb.getShort(0)) & 0xff;