首页 > 编程语言 >C#字节搜索

C#字节搜索

时间:2024-06-19 14:13:03浏览次数:22  
标签:... 字节 C# int startIndex 搜索 数组 byte

字节搜索

该系列方法用于检索字节的开头和结尾

using System;

class ByteArraySearch
{
    public static void Main()
    {
        // 示例:长字节数组
        byte[] sourceArray = new byte[] {
            // ... 其他数据 ...
            0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0, 
            // 假设这是我们要找的子数组的开头
            0x01, 0x02, 0x03, 0x04, 
            // ... 子数组内容 ...
            0x55, 0x55, 
            // 假设这是我们要找的子数组的结尾
            0xAA, 0xBB
            // ... 其他数据 ...
        };

        // 要查找的开头和结尾字节数组
        byte[] startSequence = new byte[] { 0x01, 0x02, 0x03, 0x04 };
        byte[] endSequence = new byte[] { 0xAA, 0xBB };

        // 查找并打印匹配的子数组的起始索引(如果找到)
        int startIndex = FindSubArrayWithStartAndEnd(sourceArray, startSequence, endSequence);
        if (startIndex != -1)
        {
            Console.WriteLine($"找到了匹配的子数组,起始索引为: {startIndex}");
            // 计算子数组的结束索引
            int endIndex = startIndex + startSequence.Length + GetSubArrayLengthAfterStart(sourceArray, startIndex, endSequence);
            // 打印匹配的子数组
            Console.WriteLine($"匹配的子数组为: {BitConverter.ToString(sourceArray, startIndex, endIndex - startIndex)}");
        }
        else
        {
            Console.WriteLine("没有找到匹配的子数组。");
        }
    }

    // 寻找具有特定开头和结尾的子数组的起始索引
    static int FindSubArrayWithStartAndEnd(byte[] source, byte[] startSeq, byte[] endSeq)
    {
        for (int i = 0; i <= source.Length - startSeq.Length - endSeq.Length; i++)
        {
            bool startMatch = true, endMatch = true;

            // 检查开头是否匹配
            for (int j = 0; j < startSeq.Length; j++)
            {
                if (source[i + j] != startSeq[j])
                {
                    startMatch = false;
                    break;
                }
            }

            // 如果开头匹配,检查结尾是否匹配
            if (startMatch)
            {
                for (int k = 0; k < endSeq.Length; k++)
                {
                    if (source[i + startSeq.Length + k] != endSeq[k])
                    {
                        endMatch = false;
                        break;
                    }
                }
            }

            if (startMatch && endMatch)
            {
                return i;
            }
        }
        return -1; // 没有找到匹配
    }

    // 给定起始索引后,计算直到特定结尾序列的子数组长度
    static int GetSubArrayLengthAfterStart(byte[] array, int startIndex, byte[] endSequence)
    {
        int count = 0;
        bool endFound = false;
        for (int i = startIndex; i < array.Length; i++)
        {
            if (!endFound && i + endSequence.Length <= array.Length)
            {
                endFound = true;
                for (int j = 0; j < endSequence.Length; j++)
                {
                    if (array[i + j] != endSequence[j])
                    {
                        endFound = false;
                        break;
                    }
                }
                if (endFound)
                {
                    return count + endSequence.Length;
                }
            }
            count++;
        }
        return count;
    }
}

标签:...,字节,C#,int,startIndex,搜索,数组,byte
From: https://www.cnblogs.com/dongrizhixue/p/18256110

相关文章

  • IDC行业新动向:政策引领、技术创新与投资热潮共绘未来蓝图
    近期,行业内涌现出一系列引人瞩目的热点事件,这些事件不仅体现了IDC行业的创新活力,也预示着行业未来的发展趋势。一、政策驱动与算力基础设施建设•《广东省关于人工智能赋能千行百业的若干措施》发布:广东省出台的这一措施明确了人工智能在千行百业的应用方向,并强调了算力基础设......
  • WebService异常: 提供的 URI 方案“https”无效,应为“http”。 参数名: via
    解决如下:把节点 httpsTransport改为 httpTransport原配置:<bindings><customBinding><bindingname="ZWS_CUST"><mtomMessageEncodingmessageVersion="Soap11WSAddressing10"/>......
  • HarmonyOS NEXT - 从TypeScript到ArkTS的适配指导
    一:ArkTS语法适配背景二:从TypeScript到ArkTS的适配规则三:适配指导案例ArkTS语法适配背景 ArkTS在保持TypeScript(简称TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序开发期能检测更多错误,提升程序稳定性,并实现更好的运行性能。本文将进一步解释为什么......
  • 解决《模拟山羊》游戏启动问题:缺失wxmsw28u_core_vc_custom.dll的终极指南
    在沉浸于《模拟山羊》那荒诞不经、充满乐趣的游戏世界之前,你可能遭遇了一个小小的障碍——游戏启动时弹出错误提示,指出系统缺少一个名为“wxmsw28u_core_vc_custom.dll”的关键文件。别担心,这并非罕见问题,而且解决起来比你想象的要简单。本文将手把手教你如何跨越这个小障碍,确......
  • NSSCTF ID:389
    我开始入门pwn了,可能有些地方讲的不是很清楚,如果有讲错的地方,各位大佬一定要指点指点我。下载完后打开附件发现是python代码,blacklist是黑名单,所以这里我们要想办法绕过这个黑名单这里我通过l\s绕过了ls的检测,后面也打算这样绕过但这里好像还是被检查到了,自己看了一......
  • 使用ChatGPT来写程序代码课程作业
    学生使用ChatGPT写代码的弊端:剽窃:ChatGPT生成的代码可能与其他来源的内容相似,而且具有非常明显的特征,肉眼可辨,如果学生直接将ChatGPT生成的代码用作自己的作业,会被视为抄袭,导致诚信问题。质量:虽然ChatGPT可以生成程序代码,但它并不是一个专门为撰写作业而设计的工具。因此,......
  • [笔记] CCD相机测距相关的一些基础知识
    1.35mm胶片相机等效焦距https://zhuanlan.zhihu.com/p/419616729拿到摄像头拍摄的数码照片后,我们会看到这样的信息:这里显示出了两个焦距:一个是实际焦距:5mm,一个是等效焦距:25mm。实际焦距很容易理解——就是镜头到CCD感光元件所在的焦平面的距离。但是这个35mm等效焦距是什......
  • 2024年语言、创新教育与文化传播国际会议(LIECC 2024)
    2024年语言、创新教育与文化传播国际会议(LIECC2024)2024InternationalConferenceonLanguage,InnovationEducation,andCulturalCommunication【重要信息】大会地点:南京大会官网:http://www.icliecc.com投稿邮箱:[email protected]【注意:将稿件Word+PDF上传至邮......
  • iCloud如何高效快捷的工作
    iCloud如何高效利用在数字化时代,数据的同步和备份变得尤为重要。苹果公司的iCloud服务为用户提供了一个无缝的数据同步解决方案,无论是照片、文档还是应用程序数据,都能在用户的多个设备间实现同步。本文将深入探讨iCloud的高级使用技巧,帮助用户更高效地利用这一强大的云服务......
  • JavaScript之BOM
    BOMBOM将浏览器中的各个部分转换成了一个一个的对象,我们通过修改这些对象的属性,调用他们的方法,从而控制浏览器的各种行为BOM对象window用来存储所有全局的属性和方法windows对象表示浏览器当前打开的窗口window对象是BOM的核心,它表示一个浏览器的实例。在浏览器中......