Как прочитать двоичный файл как 16-байтовые сегменты HEX в C #? - PullRequest
0 голосов
/ 26 июня 2019

Я довольно новичок в C #, но мне приходится работать с этим языком, потому что он является частью проекта.То, что я делаю, это в основном определенный разделитель / слияние файлов.Программа будет знать, где разделить, когда найден конкретный заголовок, и файлы должны работать с 16-битным выравниванием, поэтому я должен прочитать его как "16-байтовые строки" в HEX, как

+...p......0...

должен читаться как

2B 00 00 00 70 00 00 00 0D 00 00 00 30 00 00 00 

Я не хочу читать его как строки из-за проблемы кодирования / кодировки.Что вы можете мне предложить?Одна проблема, о которой я подумал, заключается в том, что чтение 16 байтов за раз может быть довольно медленным, потому что я пытался создать буфер Fread в C ++, и это было не быстро - вообще - но я не могу придумать другого способа сделать это.

1 Ответ

0 голосов
/ 26 июня 2019

Вот код, который я написал на данный момент.Это работает, но я думаю, что это не эффективно.

        int byteSize = 16;
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
        {
            var buffer = new byte[byteSize]; // in this buffer I'm saving the 16 bytes read
            while (fs.Read(buffer, 0, byteSize) > 0)
            {
                string temp = System.Text.RegularExpressions.Regex.Replace(ByteArrayToHexViaLookup32(buffer), ".{2}", "$0 ");
                Console.WriteLine(temp);
            }
        }

Для шестнадцатеричного преобразования я использую функцию "ByteArrayToHexViaLookup32", которую я нашел на этом сайте, и она очень быстрая и эффективная.Файлы, которые программа прочитает, имеют размер 700-800 килобайт.Регулярное выражение предназначено только для видимости / отладки консоли (добавляет пробел для каждого байта), поэтому оно не будет там в ближайшее время.

Мой ЦП получает быстрый скачок до 30% и завершает процесс за 2/3 секунды.Вот почему я говорю, что это не самый эффективный способ сделать это.(У меня есть 6700HQ, так что я думаю, что на 2 Duo процессор, на котором будет работать эта программа, потребует намного больше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...