2016-04-02 8 views
0

Diese Frage scheint einzigartig, aber ich habe Schwierigkeiten bei der Lösung.Java, wie man eine Sammlung von Byte aus einem Byte-Array bekommt

Ich habe ein Byte-Array (ein DW pro Zeile) und versuchen, den Byte-Wert für alle 9 Bytes zu erhalten. Hier ist , wie der Byte-Array wie folgt aussieht:

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| 
....... 

Hier ist eine definierte Funktion, die ich brauche zu verwenden, um den Wert aus dem obigen Patent:

getValue(int DWOffset, int highBit, int lowBit) 

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

Meine Frage ist, wie jeden erhalten 9 Bytes von den Daten (wo das | erscheint) mit for-Schleife? Die Datenlänge kann unter Verwendung

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

Bisher kann ich Wert bekommen auf der ersten zwei Zeilen herausgefunden:

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

Nicht klar. Was ist ein DW? Was repräsentieren diese Daten? Können Sie die 'getValue()' API, die Sie verwenden sollen, genauer erklären? Oder einen Link zu einer Dokumentation bereitstellen? Diese Inline-Kommentare helfen nicht viel. Möchten Sie ein Byte aus jeder Gruppe von neun Bytes erhalten? Oder erhalten Sie alle Bytes in Blöcken von neun? – erickson

Antwort

0

Ein Teil des Problems ist, dass Sie scheinen Paradigmen zu mischen, konzeptuell Betrachten Sie es als ein 2-dimensionales und ein 1-dimensionales Array. Wenn Sie es als zweidimensional betrachten, benötigen Sie einen getValue (int row, int-Spalte), der ein einzelnes Byte zurückgibt. Dann können Sie etwas tun:

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; 
    } 
    } 
} 

Es gibt einige Sonderfälle zu behandeln, wie das, was passiert, wenn die Anzahl der verfügbaren Werte nicht ein Vielfaches von 9, was passiert. Was passiert, wenn der eingelesene Wert einen Byte-Überlauf verursacht? Ich initialisiere das Array nicht vor jeder Iteration neu, aber besteht die Gefahr, dass etwas zurückgelassen wird.