С вашей текущей настройкой вы на самом деле не читаете файл до конца. Вы создали свой StreamReader
объект и прочитали первую строку из файла. Затем вы попадаете в бесконечный цикл из-за:
while (!sr.EndOfStream)
Поскольку тело цикла не читает никакой информации из потока, вы непрерывно обрабатываете одну и ту же строку из файла, который вы сохранили до входа в цикл, поэтому вы постоянно видите 1006702593
. Если вы преобразуете это значение обратно в шестнадцатеричное из десятичного числа, вы увидите, что оно соответствует вашему первому шестнадцатеричному вводу 3c011001
.
uint binary = Convert.ToUInt32(binary_from_file, 16);
В соответствии с инструкцией Microsoft вам следует назначать каждую строку в условии условия вашего цикла while
. Это позволит вам обрабатывать каждую строку по отдельности до конца файла, где ReadLine
должен возвращать null
, поскольку читать нечего.
Этот пример читает содержимое текстового файла, по одной строке за раз,
в строку, используя метод ReadLine
класса StreamReader
.
Каждая строка текста сохраняется в строку line
и отображается на
экран.
Я также хотел бы отметить, что строка выше не преобразуется в двоичную, а скорее в целое число без знака (отсюда и ваше значение 1006702593
вместо 111100000000010001000000000001
); вам нужно преобразовать результат этого в строку с представлением базы 2, и если у вас нет веской причины использовать целые числа без знака, я бы вместо этого использовал целые числа со знаком:
string binary = Convert.ToString(Convert.ToInt32(binary_from_file, 16), 2);
Ниже приведена отредактированная копия вставки по ссылке выше для удовлетворения ваших потребностей:
string line;
using (StreamReader file = new StreamReader(@"c:\test.txt"))
while((line = file.ReadLine()) != null)
Console.WriteLine(Convert.ToString(Convert.ToInt32(line, 16), 2));
Console.ReadLine();
В двух словах, приведенный выше код соответствует следующему пути выполнения:
- Создать переменную для хранения каждой строки.
- Создайте новый
StreamReader
объект, направленный на ваш файл.
- Читать каждую строку из файла.
- Вывести эту строку в двоичном представлении.
- Закрыть поток.
- Утилизация потока.
- Приостановите
Console
, чтобы предотвратить его автоматическое закрытие.