2015-03-03 4 views
0

У меня есть строковое значение, как «0x0601930600058000050001», необходимо преобразовать в массив байтовПреобразование строки в массив байтов (0x) - Java

byte[] codes1 = new byte[]{(byte)0x06,(byte)0x01,(byte)0x93,(byte)0x06,(byte)0x00,(byte)0x05,(byte)0x80,(byte)0x00,(byte)0x05,(byte)0x00,(byte)0x01}; 

    for(byte b : codes1){ 
     System.out.println(b); 
    } 
System.out.println("======================"); 

byte[] cod = "0x0601930600058000050001".getBytes(); 
for(byte b : cod){ 
     System.out.println(b); 
    } 

И результаты различны, как сделать их одинаковыми. Выход первого контура является фактическим, которого я ожидаю, второй цикл - неправильный вывод.

Если вы видите, я разбиваю каждый 2 байта и набираю литье и используя 0x для получения фактического значения.

Вопрос: Есть ли какой-либо предопределенный метод (кодек Apache commons), который может помочь мне выполнить ту же задачу, что и первый цикл? Я получаю это значение String динамически во время выполнения.

Просьба предложить.

Спасибо!

ответ

0

Я хотел бы пойти на:

byte[] result = myString.getBytes(); 

или

byte[] result = myString.getBytes(Charset.forName("UTF-8")); 
+0

Это не получает фактический ожидаемый результат: байт [] треска = "0x0601930600058000050001" .getBytes (Charset.forName ("UTF-8")); for (byte b: cod) { \t System.out.println (b); } – Kumar

0

Ваша строка представляет собой шестнадцатеричное представление массива байтов!

С гуавы вы можете сделать это:

byte[] bytes = BaseEncoding.base16().decode(mystring) 
+0

не принимается буквенно-цифровой? например: 06038f040003800406 – Kumar

+1

Если вы ожидаете буквы в нижнем регистре, то вам необходимо указать этот кодировщик: BaseEncoding.base16(). lowerCase(). decode ("06038f040003800406"); http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/BaseEncoding.html –

Смежные вопросы