2015-04-28 17 views
11

voglio convertire una stringa singolo carattere a 5 byte esadecimali e un byte rappresentano un numero esadecimale:Java String, singolo carattere in esadecimale byte

come

String s = "ABOL1"; 

a

byte[] bytes = {41, 42, 4F, 4C, 01} 

Ho provato il seguente codice, ma Byte.decode ha ottenuto un errore quando la stringa è troppo grande, come "4F" o "4C". C'è un altro modo per convertirlo?

String s = "ABOL1"; 
char[] array = s.toCharArray(); 
for (int i = 0; i < array.length; i++) { 
    String hex = String.format("%02X", (int) array[i]); 
    bytes[i] = Byte.decode(hex); 
}     
+1

Un 'char' non è un' byte'! – fge

+1

Non esiste un "byte esadecimale". I dati sono già nel formato richiesto. Basta copiare i byte. – EJP

risposta

2

Usa String hex = String.format("0x%02X", (int) array[i]); per specificare HexDigits con 0x prima la stringa.

Una soluzione migliore è convertito in intbyte direttamente:

bytes[i] = (byte)array[i]; 
1

È possibile convertire da char in esadecimale String con String.format():

String hex = String.format("%04x", (int) array[i]); 

o la minaccia della char come int ed impiego:

String hex = Integer.toHexString((int) array[i]); 
-1

Il Byte.decode() javadoc specifica che i numeri esadecimali devono essere in forma "0x4C". Quindi, per liberarsi di eccezione, provate questo:

String hex = String.format("0x%02X", (int) array[i]); 

Ci può anche essere un modo più semplice per effettuare la conversione, perché la classe String dispone di un metodo che converte una stringa in byte:

bytes = s.getBytes(); 

Oppure, se si vuole una conversione raw in un array di byte:

int i, len = s.length(); 
byte bytes[] = new byte[len]; 
String retval = name; 
for (i = 0; i < len; i++) { 
    bytes[i] = (byte) name.charAt(i); 
} 
5

c'è qualche motivo si sta cercando di passare attraverso stringa? Perché si può solo fare questo:

bytes[i] = (byte) array[i]; 

o addirittura sostituire tutto questo codice con:

byte[] bytes = s.getBytes(StandardCharsets.US_ASCII); 
Problemi correlati