2016-08-01 11 views
0

バイト配列からメッセージを取得するロジックを実装しました。完全な長さのメッセージを取得できません

public getInfo(byte[] hi) { 

     type = .... 

     sequence = .... 

     int ack = .... 

     int lastbyte = ....; 

     int isUTF8byte = .....; 

     actual_msg += (char) hi[CHAR1]; 
     actual_msg += (char) hi[CHAR2]; 
     actual_msg += (char) hi[CHAR3]; 
     actual_msg += (char) hi[CHAR4]; 
     actual_msg += (char) hi[CHAR5]; 
    } 

問題はメッセージの最初の5文字だけです。つまり、バイト配列にHello How are youが含まれている場合、出力はHelloとなります。バイト配列はcharメッセージを持つ3番目から7番目のバイト(5バイト)を持ちます。

メッセージ内の残りの文字のロジックは、forループ内にある必要があります。現在、最初の5文字だけを読み込むロジックがあるためです。 0番目から2番目のバイトはすべてのメッセージセットで同じです。私の関心事は3〜7バイトだけです。

どうすれば実装できますか?

私はあなたがこのために探していると思う
+1

ような何かをしたいですどのようにそれが "こんにちはどのようにあなた"を保持することを期待していますか? – bradimus

+0

いいえ、私はサイズが7バイトではないことを意味します。バイト配列のフィールドは、charメッセージとして3バイト目から7バイト目までです。私は私の質問を編集しました。申し訳ありません。 – Mark023

+0

まだ 'byte 'が足りないようです。 "こんにちはどのようになっているのか"を知るためには、3バイトから19バイトまでを使用する必要があります(正しくカウントしたと仮定します)。メッセージは7バイトに制限されていますか、それともデータが必要ですか? – bradimus

答えて

1

`バイトが[]` 7バイト長である場合、あなたは、

public String getMessage(byte[] bytes) { 
    StringBuilder message = new StringBuilder(); 
    int index = 0 
    while (index < bytes.length) { 
     byte[] partOfMessage = Arrays.copyOfRange(bytes, index + 3, index + 7); 
     message.append(new String(partOfMessage , StandardCharsets.UTF_8)); 
     index += 7; 
    } 
    return message.toString(); 
} 
1

:私が正しくあなたの質問を理解していた場合

byte [] subArray = Arrays.copyOfRange(bytearray, startpos, endpos); 
String str = new String(subArray, StandardCharsets.UTF_8); 
+0

これは何をするのですか? – Mark023

+0

'byte [] subArray = Arrays.copyOfRange(bytearray、startpos、endpos);' これはあなたの配列のsubArray(メッセージを抽出する)を作成します。 'string str = new String(subArray、StandardCharsets.UTF_8); ' これは文字列に変換されます – beeb

関連する問題