Давайте предположим, что ваш заказ байт Little Endian (на основании вашего поста), и поэтому декодирование будет
int value = ((data[0]&0xff) |
((data[1]&0xff)<<8) |
((data[2]&0xff)<<16) |
((data[3]&0xff)<<24));
Если заказ большой обратный порядок байт, это будет выглядеть примерно так:
int value = ((data[3]&0xff) |
((data[2]&0xff)<<8) |
((data[1]&0xff)<<16) |
((data[0]&0xff)<<24));
В обоих случаях вариант "данных" является "байт []"
byte[] data = new byte[] {(byte)0xcb, 0x01, 0x00, 0x00};
Обн съели отредактированный запрос.
Я предполагаю, что вы можете иметь проблемы с 0xcb, как интерпретируется как отрицательное значение, то это может быть исправлено путем применения &
оператора
Полный код с теста
public class DecimalTest
{
public static int getDecimalFromBlock(byte... bytes) {
int result = 0;
for(int i=0; i<bytes.length; i++)
{
result = result | (bytes[i] & 0xff)<<(i*8);
}
return result;
}
public static void main(String[] args) throws IOException
{
System.out.println(getDecimalFromBlock(new byte[]{(byte)0xcb}));
System.out.println(getDecimalFromBlock(new byte[]{(byte)0xcb, 0x01}));
System.out.println(getDecimalFromBlock(new byte[]{(byte)0xcb, 0x01, 0x00}));
System.out.println(getDecimalFromBlock(new byte[]{(byte)0xcb, 0x01, 0x00, 0x00}));
System.out.println(getDecimalFromBlock(new byte[]{(byte)0xcb, 0x01, 0x00, 0x00, 0x00}));
}
}
Прочитайте его в ByteBuffer, установите для параметра Byte Buffer значение LITTLE_ENDIAN и вызовите метод getInt ByteBuffer. – VGR