Имам 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;