2016-04-02 14 views
0

この質問はユニークに見えるかもしれませんが、私はそれを解決することが困難です。Java、バイト配列からバイトのコレクションを取得する方法

私はバイト配列(1行につき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 

私の質問は、すべて取得する方法ですforループを使用してデータから9バイト(表示される場所)?データ長がこれまで

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

を使用することによって知ることができる、私は最初の2行の値を取得することができます。問題の

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とは何ですか?このデータは何を表していますか?あなたが使用するはずの 'getValue()' APIをより詳しく説明できますか?または、いくつかのドキュメントへのリンクを提供しますか?それらのインラインコメントはあまり役に立たない。 9バイトの各グループから1バイトを取得しますか?または、9の塊ですべてのバイトを取得しますか? – erickson

答えて

0

一部は概念的に、あなたがパラダイムを混合するように見えるということですこれを2次元配列と1次元配列の両方として見ることができます。 2次元として見ると、1バイトを返すgetValue(int行、int列)が必要です。そして、あなたはこのような何かを行うことができます。

使用可能な値の数が9の倍数でない場合に何が起こるかのように、に対処するためのいくつかのコーナーケースがあります
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; 
    } 
    } 
} 

、何が起こります。読み込まれた値によってバイトオーバフローが発生するとどうなりますか?私は各反復の前に配列を再初期化しませんが、残っている何らかのリスクがあります。

関連する問題