Binary 如何使用十六进制改进文本文件的代码以使其清晰和简单?

Binary 如何使用十六进制改进文本文件的代码以使其清晰和简单?,binary,mips,Binary,Mips,我正在接收一个像这样的十六进制文本文件 该程序的目的是将这些值转换为mips指令。有没有更好的方法重写或改进我的代码?我是c#的新手,想看看我是否能改进这个程序。返回一个和 公共静态IEnumerable GetCode(IEnumerable行) { foreach(行中的var行) { var binary=Convert.ToUInt32(第16行); var操作码=二进制>>26; var funCode=binary&0x3f; var-rs=(二进制>>21)和31; var rt

我正在接收一个像这样的十六进制文本文件

该程序的目的是将这些值转换为mips指令。有没有更好的方法重写或改进我的代码?我是c#的新手,想看看我是否能改进这个程序。

返回一个和

公共静态IEnumerable GetCode(IEnumerable行)
{
foreach(行中的var行)
{
var binary=Convert.ToUInt32(第16行);
var操作码=二进制>>26;
var funCode=binary&0x3f;
var-rs=(二进制>>21)和31;
var rt=(二进制>>16)和31;
var-rd=(二进制>>11)和31;
int nImm=(短)(二进制和0xffff);

var jImm=(二进制和0x03ffffff)我建议您作为第一步正确缩进代码。
案例0x02:
的缩进级别与
案例0x0c:
相同。但是
案例0x02:
位于另一个
开关中。
。如果您不阅读详细的代码,这会造成理解和分析代码的问题。您应该定义这段代码还有更多的目的,你的意图是什么,只是像你所做的那样在屏幕/控制台上打印,或者你想得到输出并将其提供给另一个方法。目前,如果只是打印,那么你的代码就如预期的那样,你可能会介绍一些表面的东西,但本质将保持不变。这段代码的目的是为了使ips转换器。基本上模拟一个cpu,它接受十六进制值并将它们转换为实际的mips指令
IEnumerable code=…
这意味着它将逐个枚举(每个
产生
)当有人想要使用它时,在示例中,
File.WriteLines
将枚举it@codequestion是的,它们是您正在读取的文件名,以及您要写入的文件名
GetCode(@“C:\sdfsdfdsf\sdfsdf.txt”)
etc
public static IEnumerable<string> GetCode(IEnumerable<string> lines)
{
   foreach (var line in Lines)
   {
      var binary = Convert.ToUInt32(line, 16);
      var opCode = binary >> 26;
      var funCode = binary & 0x3f;
      var rs = (binary >> 21) & 31;
      var rt = (binary >> 16) & 31;
      var rd = (binary >> 11) & 31;
      int nImm = (short)(binary & 0xffff);
      var jImm = (binary & 0x03ffffff) << 2;

      switch (opCode)
      {
         case 0x00:
            switch (funCode)
            {
               case 0x0c: yield return "syscall"; break;
               case 0x20: yield return $"add\t{_reg[rd]}, {_reg[rs]}, {_reg[rt]}";  break;
            } break;
         case 0x02: yield return $"j\t0x00{jImm:x04}";  break;
         case 0x04: yield return $"beq\t{_reg[rs]}, {_reg[rt]}, 0x{nImm:x04}"; break;
         case 0x08: yield return $"addi\t{_reg[rt]}, {_reg[rs]}, {nImm}"; break;
         case 0x0d: yield return $"ori\t{_reg[rt]}, {_reg[rs]}, 0x{nImm:x04}"; break;
         case 0x0f: yield return $"lui\t{_reg[rt]}, 0x{nImm:x04}"; break;
         case 0x23: yield return $"lw\t{_reg[rt]}, {nImm}({_reg[rs]})"; break;
         case 0x2b: yield return $"sw\t{_reg[rt]}, {nImm}({_reg[rs]})"; break;
      }
   }
}