Mam ciąg znaków w języku Java reprezentujący 16-bitową wartość podpisaną w języku HEX. Ten ciąg znaków może być dowolny od "0000"
do "FFFF"
.16-bitowy łańcuch szesnastkowy do podpisanego int w Javie
Używam Integer.parseInt("FFFF",16)
, aby przekonwertować go na liczbę całkowitą. Zwraca jednak wartość bez znaku (65535
).
Chcę, aby zwracała podpisaną wartość. W tym konkretnym przykładzie "FFFF"
powinien zwrócić -1
.
Jak mogę to osiągnąć? Ponieważ jego 16-bitowa wartość myślałem o użyciu Short.parseShort("FFFF",16)
, ale to mówi mi, że jestem poza zasięgiem. Domyślam się, że parseShort()
spodziewa się znaku minus.
@AndreasFester, dlaczego ten wymaga dalszych obsady jako krótki ? – Rachael
@Rachael Ponieważ wartość zwrócona przez 'Integer.parseInt' jest nadal (32-bitową) wartością' int' - dla '0xFFFF', to jest' 65535'. Przez przypisanie go do 'short', górne 16 bitów jest skutecznie odrzucane, a bit 15 jest traktowany jako bit znaku dla krótkiej wartości, co daje' -1' (wszystkie bity to 1). Obsada jest wymagana, aby powiedzieć kompilatorowi, że ta utrata bitów jest zamierzona - bez obsady kompilator narzekałby na "możliwą konwersję stratną z int na krótką" –
@AndreasFester dziękuję za to świetne wyjaśnienie. – Rachael