java 如何判断一个byte[] 数组中是否存在某些连续的数据

如何判断一个byte[] 数组中是否存在某些连续的数据
1、举例说明:

例如:我要判断如下的数组中是否存在0X68, 0X73, 0X5f, 0X62, 0X61, 0X79这些数据,如果存在,则把第一个元素的下标找出来.
byte[] mBaseData = {
0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X04, 0X00, 0X00, 0X00, 0X04, 0X00, 0X00, 0X00, 0X08, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X08, 0X00, 0X00, 0X00, 0X06, 0X00, 0X00, 0X00, 0X06, 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0X00, 0X00, 0X00, 0X20, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, 0X00, 0X08, 0X00, 0X00, 0X00, 0X08, 0X00, 0X00, 0X00, 0X08 };

2、解决方案:

方法一:
首先把0X68, 0X73, 0X5f, 0X62, 0X61, 0X79 数据转为数组。byte[] src=new byte[]{ 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79}。然后使用while循环一个字节一个字节进行比对。

 public int getIndex() {
        byte[] src = new byte[]{0x20, 0x21, 0x30};
        byte[] mBaseData = new byte[]{0X68, 0X73, 0X5f, 0X62, 0X61, 0X79};
        int i = 0;
        while (i < mBaseData.length) {
            if (mBaseData[i] == src[0] && mBaseData[i + 1] == src[1] && mBaseData[i + 2] == src[2]) {
                return i;
            } else {
                i++;
            }
        }
        return -1;
    }

方法二:

第 1 步: 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79 数据转为数组。byte[] src=new byte[]{ 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79}
第 2 步:srcmBaseData 数组转换成 String 字符串。
第 3 步: 利用String.indexOf()找到指定数据的位置。如果要截取一段数据,我们可以用String.substring()截取数据。

注意:必须满足以下条件:
1、字节在转换为String过程中,必须是:一个 byte 字节 对应 一次字符编码
2、编码的方式必须采用 ISO-8859-1字符集,否则:一个 byte 字节转成一个字符 时,这个字符可能需要多个 byte 字节来保存。这时候会导致数组的长度 与 转换后的字符串的长度不等。我们再使用利用String.indexOf() 来查找位置就失去了意义了。

关于这一点可以看相关的博客:Java中byte[]转String问题 丢失字节

例如:

byte[] src=new byte[]{ 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79}
String srcString = new String(src, "ISO-8859-1");
String baseString = new String(mBaseData, "ISO-8859-1");
String,indexOf(srcString);
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值