【发布时间】:2014-09-12 08:43:57
【问题描述】:
我收到来自服务器的响应,格式为
V1YYZZ0x0000010x0D0x00112050x0C152031962061900x0D410240x0E152031962061900x0F410240x1021TATADOCOMOINTERNET101
然后我将它转换为字节数组,因为我需要从这个字节中获取值。
我尝试使用
Arrays.copyOfRange(original,
from , to);
但它是基于索引而不是基于字节的。
我也尝试了以下解决方案,但它也会根据长度截断字符串(如果我使用字符串而不是字节 [])。
public static String truncateWhenUTF8(String s, int maxBytes) {
int b = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// ranges from http://en.wikipedia.org/wiki/UTF-8
int skip = 0;
int more;
if (c <= 0x007f) {
more = 1;
} else if (c <= 0x07FF) {
more = 2;
} else if (c <= 0xd7ff) {
more = 3;
} else if (c <= 0xDFFF) {
// surrogate area, consume next char as well
more = 4;
skip = 1;
} else {
more = 3;
}
if (b + more > maxBytes) {
return s.substring(0, i);
}
b += more;
i += skip;
}
return s;
}
我知道如何计算字节长度的字符串,但它只给出字节的完整字符串长度,如
这是我需要按字节提取数据包的方法。
以上代码和参数仅为示例。我需要从字符串/字节数组中逐字节获取。
我搜索了很多,但没有得到任何我可以参考的解决方案或链接。我不知道如何使用字节长度拆分字符串,因为我知道每个参数和值的字节长度。
请给我任何参考或提示。
【问题讨论】:
-
使用子字符串,因为格式/长度是已知的。如果您确实使用正则表达式,请考虑 match 而不是拆分。所以,无论如何.. 有什么问题是?此外,由于响应是一个字符串,因此最好考虑字符而不是字节。
-
如果您非常了解字节和字节的概念,那么您可以根据您的要求划分字符串。
-
实际上我们只需要使用字节来分割字符串,因为我只有这个参数的字节长度......
-
我想要什么,从这个字符串中分割出一个字节
-
仅供学习:你能告诉我为什么你的标题是9字节吗?
V1YYZZ6 字节0x0000011 字节0x0D1 字节0x00111 字节20???我不知道如何处理20