2016-08-01 49 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。字节数组具有char消息的第3到第7个字节(5个字节)。

我认为消息中剩余字符的逻辑应该位于for循环中,因为目前我有逻辑来读取前5个字符。第0到第2个字节对​​于所有消息组是相同的。只有3至7字节是我关心的问题。

我该如何执行此操作?

+1

如果'的byte []'是7个字节长,你如何期待它持有“你好,你好吗”? – bradimus

+0

不,我的意思是大小不是7个字节。字节数组的字段具有第3至第7字节作为字符消息。我编辑了我的问题。对不起 – Mark023

+0

它仍然听起来像你没有足够的'字节'。要得到“你好,你好吗”,你需要使用字节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);' 这会创建一个数组的子数组(提取消息)。 'String str = new String(subArray,StandardCharsets.UTF_8);' 这个转换就是一个字符串 – beeb