ฉันมีแพ็กเก็ต TCP ที่ส่งตัวแปรที่ไม่ได้ลงนามจำนวนมาก (ไม่ได้ลงนามเนื่องจากประหยัดพื้นที่และใช้ขีดจำกัดสำหรับ ID ที่ไม่ซ้ำกัน) ฉันต้องแปลงข้อมูลบิตสั้นที่ไม่ได้ลงนามนี้เป็นจำนวนเต็มใน java
ดังนั้นคำถามของฉันคือฉันจะแปลง byteArray[0 - 15] เป็น int ได้อย่างไร
แก้ไข:
นี่คือรหัสที่ฉันเปลี่ยนเป็น:
ByteOrder order = ByteOrder.BIG_ENDIAN;
requestedDateType = new BigInteger(ByteBuffer.allocate(2).put(data, 8, 2).order(order).array()).intValue();
บัฟเฟอร์ข้อมูลที่เข้ามาคือ:
bit 0 1 2 3 4 5 6 7 8 9
value 40 0 0 0 8 0 0 0 1 0
ข้อมูลจะถูกส่งเป็น Little Endian ฉันคิดว่าเนื่องจาก BigInteger ถือว่าใหญ่ ฉันจึงต้องแปลงเป็นสิ่งนั้น อย่างไรก็ตาม ไม่ว่าจะสั่งมากหรือน้อยก็ให้มูลค่าเท่ากันเป็นการตอบแทน
ฉันคาดว่าจะได้ 1 สำหรับค่า requestedDateType
แต่ฉันได้รับ 256 ฉันจะแพดไบต์ที่หายไปทั้งสองไบต์เพื่อให้แน่ใจว่ามันให้ฉัน 0000 0000 0000 0001 แทนที่จะเป็น 0000 0001 0000 0000
แก้ไข 2:
ช่างเถอะ. เปลี่ยนรหัสเป็น:
ByteBuffer bb = ByteBuffer.allocate(2);
bb.order(ByteOrder.LITTLE_ENDIAN);
bb.put(data, 8, 2);
int value = ((int)bb.getShort(0)) & 0xff;