Avatar of Mr_Fulano
Mr_Fulano
Flag 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

C#.NET Programming

Avatar of undefined
Last Comment
Mr_Fulano

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
Rimvis

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
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
Rimvis

Hi,

to convert hex string into byte array, you can use this:
http://pcheruku.wordpress.com/2008/10/21/sample-c-code-to-convert-hexadecimal-string-to-bytes/
Mr_Fulano

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

Thanks again!
This is the best money I have ever spent. I cannot not tell you how many times these folks have saved my bacon. I learn so much from the contributors.
rwheeler23
Mr_Fulano

ASKER
Both sets of code are excellent!