У мене є пакет TCP, який надсилає купу змінних без знаку (вони без знаку, тому що вони економлять місце та використовують обмеження для унікальних ідентифікаторів), мені потрібно перетворити ці короткі бітові дані без знаку в ціле число в 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;