Dziwne wartości HEX z pliku

0

Czytam z pliku po jednym bajcie następnie zamieniam to na wartość HEX
Integer.toHexString(data[j])

Niestety przy niektórych znakach dostaje dziwne wartości

ffffffbe
ffffff93
ffffffcc
itp

Dlaczego tak się dzieje i jak to naprawić ?

0

Nie wiem co masz na myśli pisząc

zamieniam to na wartość HEX
więc nie wiem jak naprawić.
Funkcja toHexString() oczekuje argumentu typu int, zatem data[j] jest konwertowane na int (dopisywane są 24 bity z przodu), jeśli data[j] jest ujemne, to najbardziej znaczący bit jest różny od zera, więc powstała liczba wymaga 32 bitów <=> 8 cyfr szesnastkowo.

0

pokaż co i jak czytasz, a nie jak wyświetlasz już wczytaną wartość.
Tak jak pisał poprzednik jeśli masz data[] które jest byteem to zachodzi konwersja do int z uwzględnieniem znaku (java nie ma unsigned). Popraw to tak i po problemie:

Integer.toHexString(0xff & data[j]);
0

Wyglada to jakby czytal po bajcie a bajty w javie sa signed, i z np. 255 robione jest -1 a nastepnie Integer.toHexString() wypelnia wysokie bity jedynkami bo taki jest znak bajtu. Wczytane bajty trzeba maskowac:

byte b = costamCostamCzytaByte();
Integer.toHexString(((int) b) & 0xFF);
(Nie jestem pewien czy to rzutowanie jest potrzebne, chyba nie...)

To taki moj strzal.

1 użytkowników online, w tym zalogowanych: 0, gości: 1