如何 判断一个十六进制文件是否包含有“00 00 01 FC”?(如何根据帧格式)

解决方案 »

  1.   

    每次读取4个字节,然后比对,可以比对流,也可以把她转为int,然后比对int
      

  2.   

    网上搜索c# kmp,改改就行了。
      

  3.   


    using System;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;namespace fileContainTest
    {
        public partial class TestForm : Form
        {
            string filePath = @"D:\VS2008\test\fileContainTest\file.txt";
            public TestForm()
            {
                InitializeComponent();
            }        private void btnTest_Click(object sender, EventArgs e)
            {
                string strFile = readFile(filePath);
                if (strFile.Contains("00 00 01 FC"))
                    MessageBox.Show("含有");            
            }        private string readFile(string path)
            {
                StreamReader fileReader = new StreamReader(filePath);
                StringBuilder strBuildFile = new StringBuilder();
                string fileLine="";            
                while (fileLine != null)
                {
                    fileLine = fileReader.ReadLine();
                    strBuildFile.Append(fileLine);
                }
                return strBuildFile.ToString();
            }
        }
    }
      

  4.   

    string filePath = @"D:\VS2008\test\fileContainTest\file.mp4";
    string strFile = readFile(filePath);
    if (strFile.Contains("00 00 01 FC"))
    {}
    这样不行的,你不需要转换成二进制数组然后再判断吗?
      

  5.   

    你先解释一下什么叫“十六进制文件”...文件就只有二进制的,内容是什么完全取决于reader...
      

  6.   

    就是串匹配算法...
    说白了字符串查找也是这个原理.
    lz自己google一下kmp算法.
      

  7.   

    UltraEdit看视频文件是这样的:....89 67 00 00 01 FC 67 42 00 1E AB 40 B0 4B 20 00 00 00 01 68 CE 38 80....,然后以 00 00 01 FC为一帧的开始
    如何根据码流帧格式,查找获取帧头部,判断文件类型?
      

  8.   


               bool bFound = false;
                int pos = -1;
                string strFilename = @"E:\Users\matrixchen\Videos\day3part1_2MB_ch9.wmv";
                FileStream stream = File.Open(strFilename, FileMode.Open);            byte b1 = 0x00;
                byte b2 = 0x00;
                byte b3 = 0x01;
                byte b4 = 0xFC; 
                if (stream != null)
                {
                    int baseLen = 102400;
                    byte[] buff = new byte[baseLen + 3];
                    int nRead = stream.Read(buff, 0, buff.Length);
                    int nBasePos = 0;
                    while (nRead > 3 && !bFound)
                    {
                        for (int i = 0; i < nRead - 3; i++)
                        {                        if (buff[i] == b1 && buff[i + 1] == b2 && buff[i + 2] == b3 && buff[i + 3] == b4)
                            {
                                bFound = true;
                                pos = nBasePos + i;
                                break;
                            }
                        }
                        nBasePos += baseLen;
                        stream.Seek(-3, SeekOrigin.Current);
                        nRead = stream.Read(buff, 0, buff.Length);
                    }                stream.Close();
                    stream.Dispose();
                }
    结果: 
    bFound : 是否找到
    pos :位置
      

  9.   

     while (nRead > 3 && !bFound)有用吗?
     应该改成if(nRead > 3 && !bFound)吧?