怎么在byte数组里面查找另一个byte数组在第一个数组里面的位置啊

linye525 2013-01-31 06:07:52
必须byte[] b={1,2,3,4,6,0,4,6};
需要查找的是bte[] bb={4,6};
类似字符窜查找indexof的。
怎么最快的查找?
...全文
1045 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
linye525 2013-01-31
  • 打赏
  • 举报
回复
引用 6 楼 caozhy 的回复:
和这个问题无关。 你的api声明可能有问题。
2.0运行一切正常
gxingmin 2013-01-31
  • 打赏
  • 举报
回复
引用 4 楼 linye525 的回复:
测试完毕,数组越界
改这样就不越界了
 public int GetIndexOf(byte[] b, byte[] bb)
        {
            if (b == null || bb == null || b.Length == 0 || bb.Length == 0 || b.Length<bb.Length)
                return -1;

            int i, j;
            for (i = 0; i < b.Length - bb.Length + 1; i++)
            {
                if (b[i] == bb[0])
                {
                    for (j = 1; j < bb.Length; j++)
                    {
                        if (b[i + j] != bb[j])
                            break;
                    }
                    if (j == bb.Length)
                        return i;
                }
            }
            return -1;
        }
  • 打赏
  • 举报
回复
byte[] b = { 1, 2, 3, 4, 6, 0, 4, 6 }; byte[] bb = { 4, 6 }; var i = b.Select((t, index) => new { t = t, index = index }).FirstOrDefault(t => b.Skip(t.index).Take(bb.Length).SequenceEqual(bb)).index;
threenewbee 2013-01-31
  • 打赏
  • 举报
回复
和这个问题无关。 你的api声明可能有问题。
linye525 2013-01-31
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
byte[] b={1,2,3,4,6,0,4,6}; byte[] bb={4,6}; int query = b.Select((x, i) => new { i, x = b.Skip(i).Take(2) }).FirstOrDefault(x => x.x.SequenceEqual(bb)).i;
可以弄个2.0的项目吧。 设置4.0虽然支持linq,但是我一个方法莫名报错 api如下 对 PInvoke 函数“WindowsFormsApplication1!WindowsFormsApplication1.Api::VirtualQueryEx”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
linye525 2013-01-31
  • 打赏
  • 举报
回复
测试完毕,数组越界
threenewbee 2013-01-31
  • 打赏
  • 举报
回复
byte[] b={1,2,3,4,6,0,4,6}; byte[] bb={4,6}; int query = b.Select((x, i) => new { i, x = b.Skip(i).Take(2) }).FirstOrDefault(x => x.x.SequenceEqual(bb)).i;
linye525 2013-01-31
  • 打赏
  • 举报
回复
我是在内存里面的搜索字节查找个东西,貌似会很不效率
gxingmin 2013-01-31
  • 打赏
  • 举报
回复
  

        public  int GetIndexOf(byte[] b, byte[] bb)
        {
            if (b == null || bb == null || b.Length == 0 || bb.Length == 0)
                return -1;

            int i, j;
            for (i = 0; i < b.Length; i++)
            {
                if (b[i] == bb[0])
                {
                    for (j = 1; j < bb.Length; j++)
                    {
                        if (b[i + j] != bb[j])
                            break;
                    }
                    if (j == bb.Length)
                        return i;
                }
            }
            return -1;
        }

//调用代码
  byte[] b = { 1, 2, 3, 4, 6, 0, 4, 6 };
  byte[] bb = { 4, 6 };

  int i = GetIndexOf(b, bb);


111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧