Potrzebuję przekonwertować tablicę 2-bajtową (bajt [2]) na wartość całkowitą w java. Jak mogę to zrobić?Java: Konwertuj bajt na liczbę całkowitą
Odpowiedz
Można użyć ByteBuffer
na to:
ByteBuffer buffer = ByteBuffer.wrap(myArray);
buffer.order(ByteOrder.LITTLE_ENDIAN); // if you want little-endian
int result = buffer.getShort();
Zobacz także Convert 4 bytes to int.
+1 za rozwiązanie ByteBuffer – Casey
Dziękuję, że to zadziałało. Czy ByteBuffer zajmie się podpisanymi i niepodpisanymi bajtami? – keshav
@keshav: co masz na myśli? Nie ma czegoś takiego jak bajt "podpisany" lub "niepodpisany". Bajt to po prostu grupa "0" i "1"; znaczenie ** ma wpływ na interpretację tych liczb. –
Cóż, każdy bajt jest liczbą całkowitą z zakresu -128..127, więc potrzebny jest sposób odwzorowania pary liczb całkowitych na jedną liczbę całkowitą. Jest wiele sposobów na to, w zależności od tego, co zakodowałeś w parze bajtów. Najczęstszym będzie przechowywanie 16-bitowej liczby całkowitej ze znakiem jako pary bajtów. Konwersja że z powrotem do liczby całkowitej zależy od tego, czy zapisać go forma big-endian:
(byte_array[0]<<8) + (byte_array[1] & 0xff)
lub little endian:
(byte_array[1]<<8) + (byte_array[0] & 0xff)
W Javie bajty są podpisane, co oznacza, że wartość bajt może być ujemna , a kiedy tak się stanie, oryginalne rozwiązanie @ MattBall nie zadziała.
Na przykład, gdy binarny postać tablicy bajtów tak:
następnie myArray [0] 1000 1101
i myArray [1] 1000 1101
, wartość dziesiętną bajtu 1000 1101
jest -115
zamiast 141 (= 2^7 + 2^3 + 2^2 + 2^0)
jeśli stosujemy
int result = (myArray[0] << 8) + myArray[1]
wartość będzie równa -16191
, która jest NIEPRAWIDŁOWA.
Powodem jego złe jest to, że gdy interpretujemy tablicę 2-bajtowy do liczby całkowitej, wszystkie bajty są niepodpisane, więc podczas tłumaczenia, należy zmapować podpisane bajtów do unsigned integer:
((myArray[0] & 0xff) << 8) + (myArray[1] & 0xff)
wynikiem jest 36237
, użyj kalkulatora lub ByteBuffer, aby sprawdzić, czy jest poprawny (zrobiłem to i tak, to prawda).
wielkie dzięki za wyjaśnienie :) – shadygoneinsane
Ponadto, jeśli można użyć biblioteki Guava:
Ints.fromByteArray(0, 0, myArray[1], myArray[0]);
Było warto wspomnieć, ponieważ wiele projektów używać go w każdym razie.
Wystarczy to zrobić:
return new BigInteger(byte[] yourByteArray).intValue();
Działa świetnie na konwersje poleceń Bluetooth itd. Nie trzeba się martwić o podpisane vs. unsigned konwersji.
- 1. Konwertuj liczbę całkowitą na tablicę znaków: java
- 2. Konwertuj 2 bajty na liczbę całkowitą
- 3. Konwertuj ciąg binarny na liczbę całkowitą
- 4. Konwertuj ciąg liczb na liczbę całkowitą
- 5. Konwertuj liczbę całkowitą na tablicę bajtów
- 6. Konwertuj MFC CString na liczbę całkowitą
- 7. Konwertuj liczbę całkowitą na przedział czasowy
- 8. Konwertuj dane wejściowe użytkownika na liczbę całkowitą
- 9. Konwertuj mały ciąg endianu na liczbę całkowitą
- 10. Konwertuj system.data.linq.binary na bajt []
- 11. Konwertuj bajt [] na sbyte []
- 12. Konwersja Java na liczbę całkowitą do szesnastkowej
- 13. Konwertuj bajt [] na Typ bufora
- 14. (Javascript) Konwertuj bajt [] na obraz
- 15. Konwertuj java.io.StringWriter na bajt [] array
- 16. Konwertuj [8] bajt na uint64
- 17. Konwertuj liczbę całkowitą na ciąg bez przydzielania pamięci
- 18. Konwertuj ciąg na liczbę całkowitą z dziesiętnym w języku Python
- 19. Konwertuj ciąg znaków Ruby na liczbę całkowitą z wartością domyślną
- 20. Konwertuj dużą liczbę całkowitą na pełną wartość w PHP
- 21. Konwertuj dużą liczbę całkowitą na ciąg szesnastkowy w JavaScript
- 22. Konwertuj adres IP na 32-bitową liczbę całkowitą w Ruby
- 23. QByteArray na liczbę całkowitą
- 24. Konwertuj ciąg szesnastkowy na bajt w języku Java
- 25. Konwertuj bajt na podwójną precyzję w PostgreSQL
- 26. Konwertuj wartość całkowitą koloru na RGB
- 27. Java - Byte [] na bajt []
- 28. Jak zwrócić liczbę całkowitą w java?
- 29. Konwertuj Go [] bajt na C * char
- 30. Konwertuj obraz na bajt z php
To pytanie może wymagać pewnych wyjaśnień. W tej chwili zobaczymy tylko, co masz na myśli, wybierając odpowiedź. –