Так что в основном я пишу приложение, которое ищет файлы PNG в двоичном файле. Он делает это, читая в целом двоичный файл в массив байтов, а затем преобразовывая его в строку с помощью метода Convert.ToBase64String, а затем используя регулярное выражение, которое соответствует информации заголовка PNG и концевому фрагменту, чтобы найти изображения. Проблема заключается в использовании метода ToBase64String генерирует совершенно разные выходы в зависимости от длины массива байтов, и документация по MSDN, похоже, не описывает его. В любом случае, вот пример того, что я имею в виду.Как надежно regex a Base64String
byte[] somebytes = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
Console.WriteLine(Convert.ToBase64String(somebytes));
Выход в этом случае «AQIDBAUGBwg =» Теперь, если я пропущу байт ...
byte[] somebytes = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
somebytes = somebytes.Skip(1).ToArray();
Console.WriteLine(Convert.ToBase64String(somebytes));
Выход теперь «AgMEBQYHCA ==» так почти каждый персонаж изменился от предыдущий пример.
Так я безнадежно следую неправильному пути для регулярного выражения двоичного файла или есть метод (может быть, дополнением?) Я могу гарантировать большую согласованность между этими преобразованиями?
Update: На основе обратной связи я собрал, кажется, я просто должен отойти от решения Regex и ручного поиска последовательностей начала и конца байта вручную сам. Не уверен, почему меня задерживают, так как я просто хотел понять, почему мое другое решение действительно сработало, и, похоже, нет никаких других сообщений по этой теме. В любом случае, спасибо всем за быструю обратную связь. Я отправлю алгоритм, который я использовал для поиска изображений, когда я закончил, если он может принести пользу кому-то другому.
Да, вы. Нет смысла делать base64, а затем пытаться найти заголовок. Почему бы просто не найти в двоичном коде? Или если вы должны использовать шестнадцатеричный для согласования –
* «Он делает это, читая в целом двоичный файл в массив байтов, а затем преобразовывая его в строку с использованием метода Convert.ToBase64String, а затем используя регулярное выражение, соответствующее заголовку PNG информацию и конец фрагмента, чтобы найти изображения. "* Что ...? У вас есть байтовый массив, поэтому выполните поиск массива байтов. –
Что касается изменения, это изменяется, потому что вы перемещаете массив. Base64 принимает по 6 бит за раз и переводит в символ. Если вы переместитесь на байты (8 бит), вы получите совершенно разные символы. –