Как извлечь из байтов данные на C#?

Добрый день, у меня есть зашифрованный файл, мне нужно читать его по байтам и извлекать из них определенные данные. Как я могу это сделать? И ещё чтобы понять какие данные извлекать перед символами стоит определенная буква. Например после D мне надо читать 4 байта и собрать их в 32-разрядноечисло.
  • Вопрос задан
  • 170 просмотров
Решения вопроса 2
insighter
@insighter
-First time? - Huh? (C#, React, JS)
const int MIN_DATA_SIZE = 1 + sizeof(int);
        const byte D_PREFIX = 0x44; // D ascii код

        static void Main(string[] args)
        {
            {
                using var reader = new BinaryReader(File.OpenRead(@"c:\temp\file.dat"));
                while (true) {
                    var canRead = reader.BaseStream.Position <= reader.BaseStream.Length - MIN_DATA_SIZE;
                    if (!canRead) 
                        break;

                    if (reader.ReadByte() != D_PREFIX) 
                        continue;

                    var value = reader.ReadInt32();
                    Console.WriteLine($"Прочитано: {value}");
                }
            }
        }
Ответ написан
Комментировать
vabka
@vabka Куратор тега C#
Токсичный шарпист
Делаешь File.Open - ты получишь Stream, с помощью которого ты можешь считывать данные из файла.
Там есть метод ReadAsync, в который можно передать некоторый буфер, чтобы заполнить его данными.
Твоя задача - написать машину состояний (гугли) для каждого из твоих префиксов и побайтово читать файл.

Для чуть большего удобства и эффективности можешь воспользоваться System.IO.Pipelines (гугли) и System.Threading.Channels

Если очень интересно, могу скинуть ссылку на свой репозиторий, где с их помощью разбираются бинарные данные, которые передаются по сети
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы