Czytam 8 bajtów danych z urządzenia sprzętowego. Muszę przekształcić je w wartość liczbową. Myślę, że chcę je przekonwertować na długi, ponieważ powinien zmieścić 8 bajtów. Nie jestem zaznajomiony z Javą i niskopoziomowymi operacjami typu danych. Wydaje mi się, że mam dwa problemy (poza faktem, że prawie nie ma dokumentacji dla danego sprzętu), bajty oczekują, że będą niepodpisane, więc nie mogę przeprowadzić prostej konwersji całkowitej. Nie jestem pewien, jaka to endaniczność.Jak przekonwertować bajt na długi w Javie?
Każda rada byłaby doceniona.
skończyło się to (wzięte z jakiegoś kodu źródłowego pewnie powinien przeczytać tydzień temu):
public static final long toLong (byte[] byteArray, int offset, int len)
{
long val = 0;
len = Math.min(len, 8);
for (int i = (len - 1); i >= 0; i--)
{
val <<= 8;
val |= (byteArray [offset + i] & 0x00FF);
}
return val;
}
Dlaczego trzeba przekonwertować te 8 bajtów na jedną wartość liczbową? Jeśli rzeczywiście są bajtami składowymi o większej wartości, nie są one ani "podpisane" ani "niepodpisane". Jeśli nie wiesz, czym jest ich endianizm, po prostu nie możesz zinterpretować ich jako długiej wartości. –
Wiem, że są to kolejne wartości (licznik magnetyczny), więc dzięki próbom i błędom mogę stwierdzić, kiedy raportuje poprawną inkrementację. Muszę przekonwertować je na jedną wartość liczbową, aby określić szybkość zmian. – Jotham
Powinieneś zastąpić 0x00FF przez 0xFFL, ponieważ lepiej byłoby wyrazić zamiar konwersji bajtu na długi. – starblue