2013-10-08 2 views
1

В моем приложении я читаю некоторые данные из таблицы. Которая находится в строчном формате. Мне нужно разобрать эти данные в байт. Пример: Предположим, моя строка содержит 0e , чем я хочу получить 0e в качестве значения байта. здесь (byte) (Integer.parseInt("0e",16) & 0xff); не будет работать, поскольку он будет анализировать это значение до целого числа. Любая помощь по этому поводу будет оценена. Спасибо заранее.Как преобразовать шестнадцатеричную строку в шестнадцатеричный байт?

+0

Является ли строка всегда один байт (двух символов)? Или вам нужно создать массив байтов? – azz

+0

Да, я создам arraylist из байтов, который позже будет частью. Но сначала я хочу получить то же значение, то есть 0e из строки. Если строковое значение равно 0A, то я хочу, чтобы значение байта 0A – Rajesh

ответ

8

Даже если Integer.parseInt("0e", 16) & 0xff производит integer, там ничего не мешает вам добавить ролях:

byte b = (byte)(Integer.parseInt("0e",16) & 0xff); 

Вы можете использовать String.Format, чтобы убедиться, что преобразование работает должным образом:

String backToHex = String.format("%02x", b); // produces "0e" 
+0

, если вы видите мой код, я добавил, но проблема в том, что он не даст 0e в результате, который i want – Rajesh

+1

@Rajesh, шестнадцатеричный - это просто способ представления чисел. '0e' - это то же число, что и' 14' в десятичном значении, или '00001110' в двоичном формате. Тип данных 'byte' хранится только двоично, а не' 0e' или '14' или любое другое числовое представление. Я предполагаю, что вы ожидаете, что он отобразит '0e', когда вы попытаетесь распечатать его, но это потребует от вас дополнительного форматирования. – jonhopkins

+0

@Rajesh Это отлично работает на ideone ([link] (http://ideone.com/NYQOq8)). – dasblinkenlight

2

Вы можете разобрать байт по следующему коду:

byte b = Byte.parseByte("0e", 16) 
3

Попытка:

byte b = Byte.parseByte("0e", 16); 
1

Это преобразует вашу строку в список байтов.

public static List<Byte> parseStringBytes(String str) 
{ 
    if (str.length() % 2 == 1) 
     str = "0" + str; // otherwise 010 will parse as [1, 0] instead of [0, 1]      

    // Split string by every second character 
    String[] strBytes = str.split("(?<=\\G.{2})"); 
    List<Byte> bytes = new ArrayList<>(strBytes.length); 
    for (String s : strBytes) { 
     bytes.add(Byte.parseByte(s, 16)); 
    } 

    return bytes; 
}  

вызовов следующим образом:

System.out.println(parseStringBytes("05317B13")); 
// >>> [5, 49, 123, 19] 
+0

спасибо за помощь – Rajesh

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