2013-03-04 14 views
11

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.

risposta

13

È possibile lanciare l'int tornato da Integer.parseInt() a breve:

short s = (short) Integer.parseInt("FFFF",16); 
System.out.println(s); 

Risultato:

-1 
+0

@AndreasFester, perché questo richiede ulteriori cast come breve ? – Rachael

+2

@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 –

+0

@AndreasFester grazie per questa grande spiegazione. – Rachael

2

provare

int i = (short) Integer.parseInt("FFFF", 16); 
+0

Grazie per l'aiuto! – Dimme

Problemi correlati