C# 我在处理文件中的十六进制数据时陷入了循环
我试图接收一个包含十六进制值的文件,将其转换为二进制文件,但文件读取器在接下来的几行中没有读取,它被卡在了一个循环中C# 我在处理文件中的十六进制数据时陷入了循环,c#,binary,C#,Binary,我试图接收一个包含十六进制值的文件,将其转换为二进制文件,但文件读取器在接下来的几行中没有读取,它被卡在了一个循环中 以下是十六进制文件的外观: 3c011001 34300000 8e080000 下面是我用来生成输出的代码: using System; using System.IO; class MaddinClass { static void Main (string[] args) { StreamReader sr = new Stre
以下是十六进制文件的外观: 3c011001
34300000
8e080000 下面是我用来生成输出的代码:
using System;
using System.IO;
class MaddinClass
{
static void Main (string[] args)
{
StreamReader sr = new StreamReader("MachineCode.txt");
string binary_from_file = sr.ReadLine();
while(!sr.EndOfStream)
{
uint binary = Convert.ToUInt32(binary_from_file, 16);
Console.WriteLine(binary);
}
}
}
我得到的循环结果如下:
10067025931006702593
1006702593
我希望它移动到下一行并存储新的二进制结果,而不是重复打印相同的值。使用当前设置,您并不是真正地将文件读到底。您已经创建了
StreamReader
对象,并从文件中读取第一行。然后,由于以下原因,您将陷入无休止的循环:
while (!sr.EndOfStream)
由于循环体不从流中读取任何信息,因此在进入循环之前,您一直在处理存储的文件中的同一行,这就是为什么始终看到1006702593
。如果将该值从十进制转换回十六进制,您将看到它与第一个十六进制输入的3c011001
相匹配
uint binary = Convert.ToUInt32(binary_from_file, 16);
根据,您应该在while
循环中分配每一行。这将允许您单独处理每一行,直到文件结束,其中ReadLine
应返回null
,因为没有任何内容可供读取
本例每次读取一行文本文件的内容,
使用StreamReader
类的ReadLine
方法转换为字符串。
每个文本行都存储在字符串行中
并显示在
屏幕
我还想指出,上面的行不是转换为二进制,而是一个无符号整数(因此您的值是1006702593
,而不是1111000000010000000000000001
);您需要将其结果转换为以基数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
- 读取文件中的每一行。
- 以二进制表示形式打印该行
- 关闭小溪
- 处理流
- 暂停
,以防止其自动关闭控制台