C# 二进制文件操作(内容搜索、数据截取)

        private void button2_Click(object sender, EventArgs e)
        {
            var list = new List<Frame>();
            byte[] buf;
            byte[] bytStart = {0x70, 0x6D, 0x6A, 0x73, 0x7A, 0x6A, 0x66, 0x72, 0x6D};
            byte[] bytEnd = { 0x70, 0x66, 0x72, 0x61, 0x6D, 0x65, 0x65, 0x6E, 0x64 };
            using (var fs = new FileStream(@"D:\avi\6.lxf",FileMode.Open))
            {
                buf = new byte[fs.Length];
                var len = (int)fs.Length;
                fs.Read(buf, 0, len);
            }
            var fStart = 0;
            var fEnd = 0;
            var offset = 0;
            do
            {
                fStart = IndexOf(buf, bytStart, offset);
                fEnd = IndexOf(buf, bytEnd, fStart);
                Debug.Print("{0} ~ {1}",fStart,fEnd);
                if (fStart == -1||fEnd==-1)
                {
                    offset = buf.Length;
                }
                else
                {
                    var frame = new Frame
                    {
                        Start = fStart + bytStart.Length,
                        End = fEnd,
                    };
                    frame.Length = frame.End - frame.Start;
                    frame.Data = new byte[frame.Length];
                    //内容截取                    Array.Copy(buf, frame.Start, frame.Data, 0, frame.Length);
                    list.Add(frame);
                    offset = fEnd;
                    offset += bytEnd.Length;
                }

            }
            while (offset < buf.Length);
        }

  

查找字符串的方法

        /// <summary>
        /// 报告指定的 System.Byte[] 在此实例中的第一个匹配项的索引。
        /// </summary>
        /// <param name="srcBytes">被执行查找的 System.Byte[]。</param>
        /// <param name="searchBytes">要查找的 System.Byte[]。</param>
        /// <returns>如果找到该字节数组,则为 searchBytes 的索引位置;如果未找到该字节数组,则为 -1。如果 searchBytes 为 null 或者长度为0,则返回值为 -1。</returns>
        internal int IndexOf(byte[] srcBytes, byte[] searchBytes,int offset = 0)
        {
            if (offset == -1) { return -1; }
            if (srcBytes == null) { return -1; }
            if (searchBytes == null) { return -1; }
            if (srcBytes.Length == 0) { return -1; }
            if (searchBytes.Length == 0) { return -1; }
            if (srcBytes.Length < searchBytes.Length) { return -1; }
            for (var i = offset; i < srcBytes.Length - searchBytes.Length; i++)
            {
                if (srcBytes[i] != searchBytes[0]) continue;
                if (searchBytes.Length == 1) { return i; }
                var flag = true;
                for (var j = 1; j < searchBytes.Length; j++)
                {
                    if (srcBytes[i + j] != searchBytes[j])
                    {
                        flag = false;
                        break;
                    }
                }
                if (flag) { return i; }
            }
            return -1;
        }

实本类

    public class Frame
    {
        public int Start { get; set; }
        public int End { get; set; }
        public int Length { get; set; }
        public byte[] Data { get; set; }
    }
时间: 2024-10-15 02:09:34

C# 二进制文件操作(内容搜索、数据截取)的相关文章

通过HTTP RESTful API 操作elasticsearch搜索数据

通过HTTP RESTful API 操作elasticsearch搜索数据

linux学习笔记——数据查找、数据截取

##########数据查找########## find             ##find 命令在系统中查找文件    -name        ##按照文件名查找    -user        ##按照文件属主查找    -group        ##按文件属组查找     -perm        ##按文件权限查找    -type        ##按文件类型查找            ##文件类型:b块设备c字符设备d目录f普通文件l链接s(socket)    -size

使用python操作elasticsearch实现数据插入分析

前言: 例行公事,有些人可能不太了解elasticsearch,下面搜了一段,大家瞅一眼. Elasticsearch是一款分布式搜索引擎,支持在大数据环境中进行实时数据分析.它基于Apache Lucene文本搜索引擎,内部功能通过ReST API暴露给外部.除了通过HTTP直接访问Elasticsearch,还可以通过支持Java.JavaScript.Python及更多语言的客户端库来访问.它也支持集成Apache Hadoop环境.Elasticsearch在有些处理海量数据的公司中已经

JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作

基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import java.io.IOException; /** * java标准IO(input/output)操作 * 输入流InputStrean:用于从数据源读取数据到程序中 * 输出流OutputStream:用于将数据发送至目标 * * 流划分为:节点流,处理流 * 节点流:又叫做低级流,特点:数据源明确,

使用JWPL (Java Wikipedia Library)操作维基百科数据

使用JWPL (Java Wikipedia Library)操作维基百科数据 1. JWPL介绍 JWPL(Java Wikipedia Library)是一个开源的访问wikipeida数据的Java API包,提供了快速访问维基百科中包含的消息,如重定向.类别.文章和链接结构的结构性访问接口.它提供的DataMachine 工具类可快速解析wiki格式文件,生成mysql的数据txt文件,可通过mysqlimport 导入到本地数据库中. JWPL介绍官网:https://dkpro.gi

JAVA操作JSON格式数据

由于近些日子公司在弄微信项目,而微信官方API所提供的接口当中,有些需要以POST方式进行请求,且数据传输格式要求为JSON格式数据,之前没怎么研究过,而且传递的数据格式相对也比较简单,所以直接都是采用的字符串拼接的方式进行组装的,之后再用String.format格式化一下就好了. //需要提交的json数据 String jsonData = "{\"openid\":\"%s\",\"to_groupid\":%d}";

如何恢复XP/2003的文件内容搜索

如上面讲到的,Windows XP/2003的文件内容搜索并不是不能用,只是被关闭了而已,我们只要打开XP/2003的文件内容搜索的功能就可以了. 1.点击"开始" -> "运行". 2.输入"regedit",打开注册表编辑器.3.找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ContentIndex中的"FilterFilesWithUnknownExtension

操作权限,数据权限的解决方案

ERP系统常见的问题:操作权限.数据权限的解决方案 1.页面:通过权限控制某个页面是否显示 2.按钮:通过权限控制某个页面上的按钮是否显示 3.方法:通过权限控制某个方法是否能够访问 4.数据行:通过权限控制某个用户只能看到几行数据 后台设置权限 1.操作权限:添加计划.修改计划.搜索计划权限 2.数据权限:本人.本部门.所有 实现设置 1.页面:通过请求查询用户有哪些权限-有哪些模块 function loadMenu(){ $.ajax({ url : "", type : &qu

OSharp3.0框架解说系列(6.2):操作日志与数据日志

前言 在<[开源]OSharp框架解说系列(6.1):日志系统设计>中,我们已经设计并实现了一个可扩展的日志系统,只要定义好输出端的Adapter,就可以以任意形式输出日志信息. 在日志开发中,有些日志记录需求是常规需要的,比如操作日志,数据变更日志,系统异常日志等,我们希望把这些常规需求都集成到OSharp框架当中.有了内置的支持,在做开发的时候,只需要很简单的配置,就可以实现相关需求. 关于三类日志,这里先简要描述一下: 操作日志:粗略描述系统用户(如管理员.业务人员.会员等)对系统的业务

大快搜索数据爬虫技术实例安装教学篇

大快搜索数据爬虫技术实例安装教学篇 爬虫安装前准备工作:大快大数据平台安装完成.zookeeper.redis.elasticsearch.mysql等组件安装启动成功. 1.修改爬虫安装配置文件(最好在线下修改好后再上传平台) 2.修改crawler\dkcrw\jdbc.properties配置文件(只修改图片里的内容其他内容默认即可) Hbase.zookeeper.quorum所填地址应在DKM监控平台查看: Redis相关配置看如下界面: 3.把已修改的crawler\dkcrw\下的