La forma más eficiente de reemplazar una secuencia de bytes con alguna otra secuencia

¿Cuál es la forma más eficiente de reemplazar una secuencia de bytes (por ejemplo, 67 67 67) con otra secuencia de bytes (por ejemplo, 90)? Las secuencias pueden tener diferente duración.

preguntado el 22 de mayo de 12 a las 13:05

¿Y qué tipo de soluciones NO agradables encontraste? -

Si sabe que son letras, ¿no puede hacer una cadena y usar su método de reemplazo? -

Por lo que entiendo, la pregunta es cómo reemplazar una secuencia de bytes (por ejemplo, 67 67 67) con alguna otra secuencia de bytes (por ejemplo, 90). Las secuencias pueden tener diferente duración. No se trata de un simple reemplazo de caracteres. -

Genial gracias por la solución. -

1 Respuestas

Aquí hay una aplicación corta que hace lo que necesitas:

    static void Main(string[] args)
    {
        byte [] bArray = new byte[] {11, 67, 67, 67, 33, 34, 67, 67, 11, 33, 67, 67, 67, 67};

        byte[] result = Replace(bArray, new byte[] {67, 67, 67}, new byte[] {90});

        foreach (byte b in result)
        {
            Console.WriteLine(b);
        }
    }

    private static byte [] Replace(byte[] input, byte[] pattern, byte[] replacement)
    {
        if (pattern.Length == 0)
        {
            return input;
        }

        List<byte> result = new List<byte>();

        int i;

        for (i = 0; i <= input.Length - pattern.Length; i++)
        {
            bool foundMatch = true;
            for (int j = 0; j < pattern.Length; j++)
            {
                if (input[i + j] != pattern[j])
                {
                    foundMatch = false;
                    break;
                }
            }

            if (foundMatch)
            {
                result.AddRange(replacement);
                i += pattern.Length - 1;
            }
            else
            {
                result.Add(input[i]);
            }
        }

        for (; i < input.Length; i++ )
        {
            result.Add(input[i]);
        }

        return result.ToArray();
    }

contestado el 22 de mayo de 12 a las 14:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.