2016-08-01 4 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]; 
    } 

Проблема в том, что это только дает мне первые пять символов сообщения. Я имею в виду, если массив байтов содержит Hello How are you, я получаю только вывод Hello. Байт-массив имеет от 3-го по 7-й байт (5 байтов) с символьными сообщениями.

Я думаю, что логика остающихся символов в сообщении должна быть внутри цикла for, потому что в настоящее время у меня есть логика, чтобы читать только первые 5 символов. 0-й и 2-й байты одинаковы для всех наборов сообщений. Меня беспокоит только 3rs-7-й байт.

Как это реализовать?

+1

Если 'байт []' имеет длину 7 байт, как вы ожидаете, что он проведет «Привет, как дела»? – bradimus

+0

Нет. Я имею в виду, что размер is not 7 bytes. Поля байтового массива содержат от 3-го по 7-й байт в виде сообщений char. Я редактировал свой вопрос. Извините – Mark023

+0

По-прежнему звучит так, будто у вас недостаточно байтов. Чтобы получить «Привет, как вы», вам нужно будет использовать 'byte' с 3 по 19 (при условии, что я правильно подсчитал). Является ли сообщение ограниченным 7 байтами или есть место для большего количества данных? – bradimus

ответ

1

Если я понять ваш вопрос правильно, вы хотите что-то вроде

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

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

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