разбить массив байтов ...? - PullRequest
3 голосов
/ 06 марта 2012

Каждый раз, когда я сталкиваюсь со значением "-15", я хочу поместить его в новый байтовый массив ... как бы я это сделал? Я думаю, что я просто устал и начинаю путаться и смущаться ... пожалуйста, помогите ... код выглядит следующим образом:

    fileContent = "S107184CB78120EA52S107184CB78120EA57"; 
    int len = fileContent.length(); 
    byte[] data = new byte[len/2]; 
    for (int i = 0; i < len; i += 2) 
    {
        data[i / 2] = (byte) ((Character.digit(fileContent.charAt(i), 16) << 4) + Character.digit(fileContent.charAt(i+1), 16));
    }

это даст мне следующее: [-15, 7, 24, 76, -73, -127, 32, -22, 82, -15, 7, 24, 76, -73, -127, 32, -22, 87]

Здесь я хочу, чтобы каждый элемент от -15 до следующего -15 (но не включая его) в отдельном байтовом массиве. я хочу делать это каждый раз, когда сталкиваюсь с другим -15 .. как бы я это сделал?

1 Ответ

3 голосов
/ 06 марта 2012

Если предположить, что -15 происходит случайно, вам нужен динамический массив, который в java равен List.После того, как вы собрали все свои элементы, вы можете легко преобразовать список в массив.

Это будет выглядеть примерно так:

String fileContent = "S107184CB78120EA52S107184CB78120EA57";
int len = fileContent.length();
List<Byte[]> arrays = new ArrayList<Byte[]>();
List<Byte> data = new ArrayList<Byte>();
for (int i = 0; i < len; i += 2) {
    byte b = (byte) ((Character.digit(fileContent.charAt(i), 16) << 4) + Character.digit(fileContent.charAt(i + 1), 16));
    if (b == -15) {
        arrays.add(data.toArray(new Byte[data.size()]));
        data.clear();
    }
    data.add(b);
}
arrays.add(data.toArray(new Byte[data.size()]));

Обратите внимание, что это создает List<Byte[]>, а не List<byte[]>.Я выбрал это, потому что я мог бы использовать .toArray() метод List.Если вы хотите List<byte[]>, вам нужно будет вручную переписать значение data в блоке if.

...