Link to home
Start Free TrialLog in
Avatar of Mr_Fulano
Mr_FulanoFlag for United States of America

asked on

Finding a pattern of bytes within an Array of bytes.

Hi, I'm using MS VS2010, C#.NET. I have an Array of bytes wherein I need to identify a pattern of multiple bytes. Much like the IndexOf() method does, but with an array of bytes.

Therefore, if my array contained "0A0A0A0A" (which is four tens in a row), I would like to know the index of where that pattern begins.

I came up with a way to find a NULL value, but it doesn't work for patterns of multiple bytes. Can someone provide some help to get me back on track?

Obviously I can convert the bytes to string and then look for the string equivalent, but there has to be a way to do it without so many conversions, which can cause "misreads".

Thanks,
Fulano


// hexAddress - the starting address of the string
// bytes2ReadAsString - the amount of bytes to read past the starting point.

private string findNull(string hexAddress, string bytes2ReadAsString)
        {
            int counter = 0;
            string i = "";
            
            br.BaseStream.Position = (Int32.Parse(hexAddress, System.Globalization.NumberStyles.HexNumber));
            foreach (byte mybyte in br.ReadBytes(Convert.ToInt32(bytes2ReadAsString)))
            {
                
                if (mybyte.Equals(0x0))
                {
                    break;
                }
                counter++;
            }
                       
            i = counter.ToString("X");

            // This returns the index of where the NULL begins.
            return i;
            
        }

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of Rimvis
Rimvis
Flag of Lithuania image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Mr_Fulano

ASKER

Hi Rimvis, I think it will help, but I'm still trying to figure out what arguments to pass it. It looks like I have to pass it two different Arrays of bytes. However, I have one Array and one string of bytes. For example:

My array is:  myBytes

My Pattern is: 0A0A0A0A

So, I'd like to pass it the arguments like this:

ByteSearch( myBytes, "0A0A0A0A", 0);

However, that won't work. I need make the pattern into an Array -- I think....

Still working on it.

Fulano
Thank Rimvis...very good samples. These worked well together.

Thanks again!
Both sets of code are excellent!