在C++托管中,调试和安装版本之间的XOR行为不一致



我在visual 2008中使用C++托管代码时遇到了一个有趣的问题。我相信发生这种事有一个简单的原因,但我只是错过了它,在这里有点沮丧。

问题是:我正在使用XOR来评估传输句子的校验和。好吧,它在调试中工作得很完美,如果我从visual作为发布版运行,但当我在同一台机器中构建安装程序并安装发布版时,XOR的行为完全不同,给了我不同的值。即在调试中它给了我44,在安装版本中它给我79E721FC。

代码:

{
  String^ OrigChecksum=mysentence->Substring(mysentence->IndexOf('*')+1);
  if(mysentence->StartsWith("!"))
  {
    mysentence=mysentence->Substring(mysentence->IndexOf('!')+1,mysentence->IndexOf('*')-mysentence->IndexOf('!')-1);
  }
  else if(mysentence->StartsWith("$"))
  {
    mysentence=mysentence->Substring(mysentence->IndexOf('$')+1,mysentence->IndexOf('*')-mysentence->IndexOf('$')-1);
  }
  int checksum;
  if(mysentence->Length>1)
  {
    for(int i=0;i<mysentence->Length;i++)
    {
      try
     {
       checksum ^= Convert::ToByte(mysentence[i]);
       //MessageBox::Show(Convert::ToByte(mysentence[i]).ToString("X2"));
      }
      catch(...)
      {
      }
    }
    String^ strChecksum=checksum.ToString("X2");
    //MessageBox::Show(OrigChecksum+","+strChecksum+","+checksum);
    if(OrigChecksum==strChecksum)
    {
      return true;
    }
    else
    {
     return false;
    }
  }
  else
  {
  return false;
  }
}

注意安装时我用来查看值的MessageBox,因为我不能在那里使用调试器,并且当我在Visual studio中调试时,一切都很完美。。。我尝试了另一种方法,结果如下:使用char数组array^character=mysentence->ToCharArray();并使用运算符^校验和=校验和^int(字符[num])

有人有类似的经历吗?请问,对此有什么建议或建议吗?

所有最好的Adam

int checksum;从未初始化,因此尝试对其进行异或会调用未定义的行为。

相关内容

  • 没有找到相关文章

最新更新