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ć ?
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ć ?
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.
pokaż co i jak czytasz, a nie jak wyświetlasz już wczytaną wartość.
Tak jak pisał poprzednik jeśli masz data[]
które jest byte
em to zachodzi konwersja do int z uwzględnieniem znaku (java nie ma unsigned). Popraw to tak i po problemie:
Integer.toHexString(0xff & data[j]);
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.