> 백엔드 개발 > C++ > C#의 바이트 배열 패턴 내에서 발생하는 모든 바이트 배열 패턴을 효율적으로 찾으려면 어떻게 해야 합니까?

C#의 바이트 배열 패턴 내에서 발생하는 모든 바이트 배열 패턴을 효율적으로 찾으려면 어떻게 해야 합니까?

Patricia Arquette
풀어 주다: 2025-01-20 18:01:13
원래의
211명이 탐색했습니다.

C#의 다른 바이트 배열에서 바이트 배열 패턴의 모든 항목을 효율적으로 찾습니다.

질문:

2개의 바이트 배열이 주어지면 하나는 패턴을 나타내고 다른 하나는 검색할 데이터를 포함하며 데이터 배열에서 패턴이 일치하는 위치를 결정합니다.

해결책:

제공된 코드는 Locate 확장 메서드를 사용하여 효율적이고 간결한 솔루션을 제공합니다.

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

    var list = new List<int>();

    for (int i = 0; i < self.Length; i++)
    {
        if (i + candidate.Length > self.Length)
            break;

        bool match = true;
        for (int j = 0; j < candidate.Length; j++)
        {
            if (self[i + j] != candidate[j])
            {
                match = false;
                break;
            }
        }
        if (match)
            list.Add(i);
    }

    return list.ToArray();
}

private static bool IsEmptyLocate(byte[] self, byte[] candidate)
{
    return self == null || self.Length == 0 || candidate == null || candidate.Length == 0 || candidate.Length > self.Length;
}

private static readonly int[] Empty = new int[0];</code>
로그인 후 복사

Locate 메소드는 데이터 배열을 반복하고 가능한 각 시작 위치가 패턴과 어떻게 일치하는지 확인합니다. 일치하는 항목이 있으면 해당 위치를 목록에 기록하고, 그렇지 않으면 다음 위치로 계속 진행합니다.

예:

<code class="language-csharp">// 示例字节数组
byte[] pattern = new byte[] { 12, 3, 5, 76, 8, 0, 6, 125 };
byte[] toBeSearched = new byte[] { 23, 36, 43, 76, 125, 56, 34, 234, 12, 3, 5, 76, 8, 0, 6, 125, 234, 56, 211, 122, 22, 4, 7, 89, 76, 64, 12, 3, 5, 76, 8, 0, 6, 125 };

// 定位并打印匹配位置
foreach (var position in toBeSearched.Locate(pattern))
    Console.WriteLine(position);</code>
로그인 후 복사

How Can I Efficiently Find All Occurrences of a Byte Array Pattern within Another in C#?

이 코드는 이해하기 쉽도록 원본 코드를 약간 변경하고 빈 배열 및 패턴 길이가 데이터 길이보다 긴 경우에 대한 처리를 추가합니다. IsEmptyLocate 함수는 코드 가독성과 유지 관리성을 향상시킵니다.

위 내용은 C#의 바이트 배열 패턴 내에서 발생하는 모든 바이트 배열 패턴을 효율적으로 찾으려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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