> 백엔드 개발 > C++ > C#의 바이트 배열 내에서 바이트 패턴을 효율적으로 찾는 방법은 무엇입니까?

C#의 바이트 배열 내에서 바이트 패턴을 효율적으로 찾는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-20 17:48:13
원래의
287명이 탐색했습니다.

How Can I Efficiently Find a Byte Pattern Within a Byte Array in C#?

C# 바이트 배열 패턴 검색

제공된 바이트 배열에서 지정된 바이트 패턴의 위치를 ​​확인하는 것은 다양하고 효율적인 방법을 사용하여 달성할 수 있습니다.

찾기 방법 사용

간단한 접근 방식은 다음 C# 코드 조각에 표시된 대로 Locate 메서드를 사용하는 것입니다.

<code class="language-csharp">static int[] Locate(this byte[] self, byte[] pattern)
{
    if (IsEmptyLocate(self, pattern))
        return Empty;

    var list = new List<int>();

    for (int i = 0; i < self.Length; i++)
    {
        if (IsMatch(self, pattern, i))
        {
            list.Add(i);
        }
    }

    return list.ToArray();
}</code>
로그인 후 복사

이 방법은 먼저 빈 입력 또는 잘못된 검색 기준을 확인합니다. 이러한 조건이 충족되면 빈 배열이 반환됩니다. 그렇지 않으면 입력 배열을 반복하고 IsMatch 도우미 메서드를 사용하여 패턴이 각 위치에서 일치하는지 확인합니다. 일치하는 항목이 발견된 위치는 목록에 저장되고 배열로 반환됩니다.

SearchBytePattern 방법 사용

또는 SearchBytePattern 메서드 사용을 고려할 수도 있습니다. 또한 바이트 배열에서 효율적인 패턴 일치를 위한 기능도 제공합니다.

<code class="language-csharp">public static List<int> SearchBytePattern(byte[] byteArray, List<byte> bytePattern)
{
    int start = -1;
    List<int> matches = new List<int>();

    for (int i = 0; i < byteArray.Length; i++)
    {
        if (byteArray[i] == bytePattern[0])
        {
            start = i;
            bool match = true;
            for (int j = 1; j < bytePattern.Count; j++)
            {
                if (i + j >= byteArray.Length || byteArray[i + j] != bytePattern[j])
                {
                    match = false;
                    break;
                }
            }
            if (match)
            {
                matches.Add(start);
            }
        }
    }

    return matches;
}</code>
로그인 후 복사

이 구현에서 메서드는 바이트 배열과 바이트 패턴을 입력으로 받고 잠재적 일치 항목의 시작 위치를 유지합니다. 배열을 반복하면서 각 위치의 바이트가 패턴의 해당 바이트와 일치하는지 확인합니다. 정확히 일치하는 항목이 발견되면 일치하는 위치 목록에 일치 항목의 시작 위치를 추가합니다.

위 내용은 C#의 바이트 배열 내에서 바이트 패턴을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿