2014-11-22 2 views
1

Я хочу разбить каждый из двух символов в строке и преобразовать ее в шестнадцатеричное представление массива байтов, Я просто потерял, как это сделать.Как преобразовать строку в шестнадцатеричные байты в Java

в строке а = шестигранного, который находится в десятичной 10 в строке Ь = шестигранной б, который находится в десятичной

String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc"; 
byte[] output = new byte[12]; 





          Input 
ab bb bb bb bb bb bb bb bb bb bb bc 
          output 
[-85, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -68] 
+0

нет я хочу байт массива вывода задница не строка и ее строку в HEX не гекс в строку. – H4SN

+0

Вы зарезервировали 12 байтов для строки с 24 символами? – greenapps

+0

http://stackoverflow.com/questions/5886619/hexadecimal-to-integer-in-java –

ответ

1

Принимает первый символ в группе из двух человек, умножает его шестнадцатеричное значение на 16 (он находится в 161 месте). Этот результат добавляется к шестнадцатеричному значению второго символа. не

String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc"; 
byte[] output = new byte[toConvert.length()/2]; 

for (int i = 0; i < output.length; i++) { 
    output[i] |= Character.digit(toConvert.charAt(i * 2), 16) * 16; 
    output[i] |= Character.digit(toConvert.charAt(i * 2 + 1), 16); 
} 
0

Apache Common Hex класса кодека 11 делает именно то, что вам нужно:

byte[] bytes = Hex.decodeHex("abbbbbbbbbbbbbbbbbbbbbbc".toCharArray()); 

Если вы не можете/не будете использовать третьих лиц, вы всегда сможете «заимствовать» их реализацию (слегка упрощенное - я пропустил проверки корректности для простоты):

public static byte[] decodeHex(final char[] data) { 

    final int len = data.length; 

    // Handle empty string - omitted for clarity's sake 

    final byte[] out = new byte[len >> 1]; 

    // two characters form the hex value. 
    for (int i = 0, j = 0; j < len; i++) { 
     int f = Character.digit(data[j], 16) << 4; 
     j++; 
     f = f | Character.digit(data[j], 16); 
     j++; 
     out[i] = (byte) (f & 0xFF); 
    } 

    return out; 
} 
0
for(int i = 0; i < 12; i++) { 
    output[i] = (byte) Integer.parseInt(toConvert.substring(i*2, i*2+2), 16); 
} 
+0

Примитивы не имеют методов. Может, вы имели в виду 'Integer.valueOf'? – August

+0

Нет, я имел в виду то, что я написал :) Целое - это не примитив. Просто попробуйте запустить его, вы увидите. – Dima

+0

Спасибо тоже очень полезно – H4SN

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