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