Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我在处理文件中的十六进制数据时陷入了循环_C#_Binary - Fatal编程技术网

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);
         }
     }
}
我得到的循环结果如下:

1006702593
1006702593
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
    对象
  • 读取文件中的每一行。
    • 以二进制表示形式打印该行
  • 关闭小溪
  • 处理流
  • 暂停
    控制台
    ,以防止其自动关闭