Удаление произвольного кол-ва байт в конце файла
Имеется процедура (c#) извлечения файлов из большого контейнера. Кроме самих файлов в этом контейнере нет никакой информации. Программа находит определённые 4 байта по всему массиву и записывает их смещения в отдельный массив int. Реализовано следующим образом:
public static List<int> IndexOfSequence(this byte[] buffer, byte[] pattern, int startIndex)
{
List<int> positions = new List<int>();
int i = Array.IndexOf<byte>(buffer, pattern[0], startIndex);
while (i >= 0 && i <= buffer.Length - pattern.Length)
{
byte[] segment = new byte[pattern.Length];
Buffer.BlockCopy(buffer, i, segment, 0, pattern.Length);
if (segment.SequenceEqual<byte>(pattern))
positions.Add(i);
i = Array.IndexOf<byte>(buffer, pattern[0], i + 1);
}
return positions;
}
Проблема заключается в том, что у каждого этого файла конец смещён с помощью определённого кол-ва байт так, чтобы смещение следующего файла начиналось с начального байта в шестнадцатеричной системе исчисления. Например, имеется файл размером 0x23BC92 (2342034 байт), а следующий за ним файл в контейнере имеет смещение 0x23BCA0 (2342048 байт). Между этими файлами стоит 0x0E (14 байт) "заглушки". Как раз размер этой заглушки мне и нужно узнать, чтобы удалить её с конца извлечённого файла (она имеет разный размер, но всегда один и тот же байт).
Кроме того, у меня есть метод, который может создавать такие заглушки (деление по модулю), может чем-то поможет:
(0x10 - offset % 0x10) + offset;