2015-04-28 13 views
11

chcę przekonwertować ciąg w jednym char do 5 bajtów hex i bajt reprezentuje szereg hex:Java String, pojedynczy char na hex bajtów

jak

String s = "ABOL1"; 

do

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

Próbowałem wykonać kod, ale Byte.decode dostał błąd, gdy ciąg jest zbyt duży, jak "4F" lub "4C". Czy istnieje inny sposób na konwersję?

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

'char' nie jest' byte'! – fge

+1

Nie ma czegoś takiego jak "bajt szesnastkowy". Dane są już w wymaganym formacie. Po prostu skopiuj bajty. – EJP

Odpowiedz

2

Korzystanie String hex = String.format("0x%02X", (int) array[i]); określenia HexDigits z 0x przed ciąg znaków.

Lepszym rozwiązaniem jest przekształcić int do byte bezpośrednio:

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

można przekonwertować z char hex String z String.format():

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

lub groźby char jako int i zastosowanie:

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

Byte.decode() javadoc określa, że ​​powinny być numery hex na formularzu "0x4C". Tak, aby pozbyć się wyjątkiem, spróbuj tego:

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

Nie mogą być również prostszy sposób dokonać konwersji, ponieważ klasa String zawiera metodę, która konwertuje ciąg bajtów:

bytes = s.getBytes(); 

Albo, jeśli chcesz surowego konwersji do tablicy bajtów:

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

czy jest jakiś powód, dla którego próbują przejść przez ciąg? Bo może po prostu to zrobić:

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

Albo nawet zastąpić cały ten kod z:

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