2016-04-02 1 views
0

Этот вопрос может показаться уникальным, но у меня возникают трудности с его решением.Java, как получить набор байтов из байтового массива

У меня есть байтовый массив (DW на строку) и пытается получить значение байта для каждых 9 байтов. Вот как массив выглядит следующим образом:

0 1 2 3 
4 5 6 7 
8| 9 10 11 
12 13 14 15 
16 17| 18 19 
20 21 22 23 
24 25 26| 27 
28 29 30 31 
32 33 34 35| 
....... 

Здесь определенная функция, которую нужно использовать, чтобы получить значение из приведенного выше патента:

getValue(int DWOffset, int highBit, int lowBit) 

//DWOffset indicates the row of the data. 
//highBit indicates the ending bit 
//lowBit indicates the starting bit 

Мой вопрос состоит в том, чтобы каждый 9 байтов из данных (где | появляется), используя для цикла? Длина данных может быть обнаружена с помощью

data.getLength(); //which returns the total number of bytes in the data 

До сих пор, я могу получить значение на первых двух подряд:

for(int i = 0; i < data.getLength()/(4*2); i++){ 
    getValue(i*2, 31, 0);   //DW i 
    getValue(i*2 + 1, 31, 0);  //DW i+1 
} 
+1

Не ясно. Что такое DW? Что представляют эти данные? Можете ли вы более подробно объяснить API 'getValue()', который вы должны использовать? Или укажите ссылку на какую-либо документацию? Эти встроенные комментарии не очень помогают. Вы хотите получить один байт из каждой группы из девяти байтов? Или получить все байты, в кусках из девяти? – erickson

ответ

0

Часть проблемы заключается в том, что вы, кажется, смешивания парадигм, концептуально рассматривая его как двумерный, так и одномерный массив. Рассматривая его как 2-мерный, вам нужен getValue (int row, int column), который возвращает один байт. Затем вы можете сделать что-то вроде этого:

final int TOTAL_BYTES_TO_INCLUDE = 9; 

byte[] byteArray[] = new byte[TOTAL_BYTES_TO_INCLUDE]; 
int arrayIndex = 0; 


for (int r = 0; r++; r < number_of_rows) { 
    for (int c = 0; c++; c < 4) { 
    byteArray[arrayIndex++] = getValue(r, c); 
    if (arrayIndex >= TOTAL_BYTES_TO_INCLUDE) { 
     ... do something with your byte array ... 
     arrayIndex = 0; 
    } 
    } 
} 

Там в некоторых случаях угол, чтобы иметь дело с, как то, что происходит, если количество доступных значений не кратно 9, что происходит. Что произойдет, если значение, прочитанное в причинах переполнения байта. Я не повторно инициализирую массив перед каждой итерацией, но есть ли риск того, что что-то останется.

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

  • Нет связанных вопросов^_^