ByteBuffer Fehler bei den letzten 2 Bytes

Fohnbit

Top Contributor
Hallo!

Ich bekomme ein Bytearray und benötige die Short Werte daraus:
Das ByteArray in Hex:
000B00000023FE0320014C010D010E0110FE0CFE0CFE0CFE0CFE0CFE0CFE0CFE0CFE0CFE0CFE0C010F

Lege das ganze in einen ByteBuffer:
Java:
      ByteBuffer bb = ByteBuffer.wrap(msg);
       bb.order(ByteOrder.LITTLE_ENDIAN);
und hole mir die 16 Werte raus:
Java:
      k1 = (double) bb.getShort(10) / 10 + 273.15;
       k2 = (double) bb.getShort(12) / 10 + 273.15;
       k3 = (double) bb.getShort(14) / 10 + 273.15;
       k4 = (double) bb.getShort(16) / 10 + 273.15;
       k5 = (double) bb.getShort(18) / 10 + 273.15;
       k6 = (double) bb.getShort(20) / 10 + 273.15;
       k7 = (double) bb.getShort(22) / 10 + 273.15;
       k8 = (double) bb.getShort(24) / 10 + 273.15;
       k9 = (double) bb.getShort(26) / 10 + 273.15;
       k10 = (double) bb.getShort(28) / 10 + 273.15;
       k11 = (double) bb.getShort(30) / 10 + 273.15;
       k12 = (double) bb.getShort(32) / 10 + 273.15;
       k13 = (double) bb.getShort(34) / 10 + 273.15;
       k14 = (double) bb.getShort(36) / 10 + 273.15;
       k15 = (double) bb.getShort(38) / 10 + 273.15;
       //k16 = (double) bb.getShort(40) / 10 + 273.15;

Klappt ... jedoch beim letzten erhalte ich:
Exception in thread "SocketClient" java.lang.IndexOutOfBoundsException
at java.nio.Buffer.checkIndex(Unknown Source)
at java.nio.HeapByteBuffer.getShort(Unknown Source)

Jedoch hat der ByteBuffer eine Bufferlimit von 41:
java.nio.HeapByteBuffer[pos=0 lim=41 cap=41]

Warum erhalte ich diesen Fehler?
Die Positionen müssen aber korrekt sein, da die Werte Temperaturen von 16 Eingängen eines TCP Modules sind und von 1-15 korrekt in Kelvin ausgegeben wird.

Danke!
 

Zurück
Oben