Помогите типизировать String Array байтов к фактическим - PullRequest
5 голосов
/ 13 июля 2011

У меня есть строка, которая выглядит следующим образом: ["1011000", "1000010", "1001101", "1000011"].

Мой аргумент исходит из другого места, поэтому он должен быть таким.

Мне нужно преобразовать это в реальный байтовый массив.

Вот мой метод:

public void send(String[] payloadarr)  throws IOException { 
    byte [] payload = {};

    for (int i = 0; i < payloadarr.length; i++) {
        byte x = (byte) payloadarr[i];
        payload[i] = x;
    }
    //do byte stuff with payload
}

Однако это не работает.Жалуется на необратимые типы String to byte.

Кто-нибудь может мне помочь с этим типом?

Ответы [ 3 ]

7 голосов
/ 13 июля 2011

РЕДАКТИРОВАНИЕ: Спасибо @Gabe за идею изменить значение с Integer.parseInt на Byte.parseByte

Вы можете использовать Byte.parseByte (String s, int radix) - ваш основание составляет 2 (то есть основание 2)

Вот удобный метод для преобразования массива String в byte[]:

public static byte[] stringsToBytes(String[] payloadarr) {
    byte[] payload = new byte[payloadarr.length];
    for (int i = 0; i < payloadarr.length; i++) {
        payload[i] = Byte.parseByte(payloadarr[i], 2);
    }
    return payload;
}

public static void main(String[] args) {
    System.out.println(Arrays.toString(stringsToBytes(new String[] { "1011000", "1000010", "1001101", "1000011" })));
}

Выход:

[88, 66, 77, 67]
3 голосов
/ 13 июля 2011

Трудно сказать по твоему вопросу, но звучит так, будто ты действительно хочешь

byte x = Byte.parseByte(payloadarr[i], 2);
2 голосов
/ 13 июля 2011

Вы не можете сделать это, используя (просто) приведение типов.

Вам нужно использовать Integer.parseInt(String, int), где int равно 2. Это даст вам int, который вам нужно привести к byte.

public void send(String[] payloadarr)  throws IOException { 
    byte [] payload = new byte[payloadarr.length];

    for (int i = 0; i < payloadarr.length; i++) {
        payload[i] = (byte) Integer.parseInt(payloadarr[i], 2);
    }
    //do byte stuff with payload
}

Примечания

  • Приведенный выше метод выдает NumberFormatException, если какой-либо из компонентов payloadarr не является двоичной строкой.

  • Я исправил инициализацию payload ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...