Как преобразовать данные в форматированные байты? - PullRequest
0 голосов
/ 03 января 2012

Есть ли у кого-нибудь предложения о том, как преобразовать данные (в основном, строки) в их форматированное представление байтов?

Например, если я введу строку "01", я хотел бы получить 00 01 или если я введу "0001", я хотел бы получить 00 00 00 01

Я пытался использовать ByteBuffer, но вывод всегда имеет длину 8 битов, т.е. 01 => 00 00 00 01

Ответы [ 2 ]

0 голосов
/ 03 января 2012

Я никогда не видел это представление раньше, так как оно звучит довольно неэффективно.Однако вы можете

public static void main(String... args) throws IOException {
    System.out.println("01 => " + Arrays.toString(byteValues("01")));
    System.out.println("0001 => " + Arrays.toString(byteValues("0001")));
    System.out.println("0123456789ABCDEF => " + Arrays.toString(byteValues("0123456789ABCDEF")));
}

public static byte[] byteValues(String text) {
    byte[] bytes = new byte[text.length()];
    for(int i=0;i<text.length();i++)
        bytes[i] = (byte) Character.getNumericValue(text.charAt(i));
    return bytes;
}

печатать

01 => [0, 1]
0001 => [0, 0, 0, 1]
0123456789ABCDEF => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
0 голосов
/ 03 января 2012
public static void main(String[] args) {
    System.out.println(toFormattedHexadecimal("01A"));
}

public static String toFormattedHexadecimal(String input) {
    String result = "";
    for (int i = 0; i < input.length(); i++) {
        char ch = input.charAt(i);
        result += Integer.toHexString(ch);
        result += " ";
    }
    return result;
}

Этот код выведет «30 31 41», коды ASCII для каждого символа.

...