C# пропустить шестнадцатеричные символы

Я использую C# для чтения файла, и мне нужно (иногда) пропустить несколько байтов перед выводом следующего байта. Например:

31 32 33 34 35 36 37 38 39 

Я хотел пропустить первые два (или любое заданное число) байта, а затем вывести следующий. Проблема в том, что использование приведенного ниже кода не поможет, и я не уверен, как это сделать. Мне нужно иметь возможность использовать функцию "пропустить" по всей программе. Если бы кто-то мог помочь мне, я был бы очень благодарен!

        String fileDirectory = "C:\\t.txt";
        StreamReader reader = new StreamReader(fileDirectory);
        long stickNoteLength = fileDirectory.Length;

        int hexIn;
        String hex = "";

        for (int i = 0; (hexIn = reader.Read()) != -1; i++)
        {
            for (int x = 0; x < 2; x++)
            {
               hex = hexIn.ToString("X2");
            }
            MessageBox.Show(hex);
        }

1 ответ

Ваш внутренний цикл x не потребляет никаких символов из файла. Он буквально просто берет текущий байт и конвертирует его в шестнадцатеричный код дважды подряд, фактически ничего не делая. Это на самом деле внешний цикл i что потребляет символы. Вы хотите сделать что-то вроде этого:

for (int i = 0; (hexIn = reader.Read()) != -1; i++)
{
    if (i >= 2)
    {
        hex = hexIn.ToString("X2");
        MessageBox.Show(hex);
    }
}

Хотя было бы эффективнее просто использовать Seek Функция для перехода прямо туда, где вы хотите читать дальше:

reader.BaseStream.Seek(2, SeekOrigin.Current);  // jump two characters forward
Другие вопросы по тегам