Ho una stringa in Java che rappresenta un valore a 16 bit con segno in HEX. Questa stringa può da qualsiasi cosa da "0000"
a "FFFF"
.Stringa esadecimale a 16 bit con firma int in Java
Io uso Integer.parseInt("FFFF",16)
per convertirlo in un numero intero. Tuttavia, questo restituisce un valore senza segno (65535
).
Voglio che restituisca un valore firmato. In questo particolare esempio, "FFFF"
deve restituire -1
.
Come posso ottenere questo risultato? Dato che è un valore di 16 bit, ho pensato di usare Short.parseShort("FFFF",16)
ma questo mi dice che sono fuori portata. Immagino che parseShort()
si aspetti un segno negativo.
@AndreasFester, perché questo richiede ulteriori cast come breve ? – Rachael
@Rachael Poiché il valore restituito da 'Integer.parseInt' è ancora un valore' int' (32 bit) - per '0xFFFF', ovvero' 65535'. Assegnandolo a 'short', i 16 bit superiori vengono effettivamente scartati e il bit 15 viene preso come bit di segno per il valore short, risultando in' -1' (tutti i bit sono 1). Il cast è obbligato a dire al compilatore che questa perdita di bit è intesa - senza il cast, il compilatore si lamenterebbe di una possibile conversione lossy da int a short –
@AndreasFester grazie per questa grande spiegazione. – Rachael