日期:2014-05-17  浏览次数:20909 次

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

------解决方案--------------------
C# code

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();
        }
    }
}

------解决方案--------------------
C# code

           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();
            }