У меня есть 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;