C # пропустить шестнадцатеричные символы - PullRequest
0 голосов
/ 16 мая 2011

Я использую 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 Ответ

2 голосов
/ 16 мая 2011

Ваш внутренний цикл for на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...