Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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+;中调试版本和安装版本之间的异或行为不一致+;管理 我用Visual 2008对我的C++托管代码进行了有趣的操作。我相信这是一个简单的原因,但我只是错过了它,并在这里感到有点沮丧_C++_Managed_Xor - Fatal编程技术网

C+;中调试版本和安装版本之间的异或行为不一致+;管理 我用Visual 2008对我的C++托管代码进行了有趣的操作。我相信这是一个简单的原因,但我只是错过了它,并在这里感到有点沮丧

C+;中调试版本和安装版本之间的异或行为不一致+;管理 我用Visual 2008对我的C++托管代码进行了有趣的操作。我相信这是一个简单的原因,但我只是错过了它,并在这里感到有点沮丧,c++,managed,xor,C++,Managed,Xor,问题是: 我使用XOR来计算传输语句的校验和。好吧,它在调试中工作得完美无缺,如果我从visual as release运行,但是当我在同一台机器上构建安装程序并安装该版本时,XOR的行为完全不同,给了我不同的值。ie在调试中给我44,在安装版本中给我79E721FC 守则: { String^ OrigChecksum=mysentence->Substring(mysentence->IndexOf('*')+1); if(mysentence->StartsWit

问题是: 我使用XOR来计算传输语句的校验和。好吧,它在调试中工作得完美无缺,如果我从visual as release运行,但是当我在同一台机器上构建安装程序并安装该版本时,XOR的行为完全不同,给了我不同的值。ie在调试中给我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;
  }
}
{
字符串^OrigChecksum=mycentence->Substring(mycentence->IndexOf('*')+1);
if(mycentence->StartsWith(“!”)
{
mycentence=mycentence->Substring(mycentence->IndexOf(“!”)+1,mycentence->IndexOf(“*”)-mycentence->IndexOf(“!”)-1);
}
else if(mycentence->StartsWith($))
{
mycentence=mycentence->Substring(mycentence->IndexOf(“$”)+1,mycentence->IndexOf(“*”)-mycentence->IndexOf(“$”)-1);
}
整数校验和;
如果(mycentence->Length>1)
{
对于(int i=0;i长度;i++)
{
尝试
{
校验和^=Convert::ToByte(mycentence[i]);
//MessageBox::Show(Convert::ToByte(mycentence[i]).ToString(“X2”);
}
捕获(…)
{
}
}
字符串^strChecksum=checksum.ToString(“X2”);
//MessageBox::Show(OrigChecksum+”,“+strChecksum+”,“+checksum+”;
if(OrigChecksum==strChecksum)
{
返回true;
}
其他的
{
返回false;
}
}
其他的
{
返回false;
}
}
请注意,我在安装时用于查看值的MessageBox,因为我无法在那里使用调试器,并且在Visual studio中调试时,一切都很完美。。。 我尝试了另一种方法,结果如下: 使用字符数组 数组^character=mycentence->ToCharArray(); 并使用运算符^ 校验和=校验和^int(字符[num])

有没有人有过类似的经历? 请问,这方面有什么建议或指示吗


所有最好的Adam检查和从不初始化,因此尝试使用它进行异或会调用未定义的行为。

int checksum
从不初始化,因此尝试使用它进行xor会调用未定义的行为。

为什么在那里有try catch?这些句子是通过无线电接收的,非常脏。有时我会收到一个空字符,导致ToByte出现异常…为什么你会在那里尝试捕获?这些句子是通过无线电接收的,非常肮脏。有时我会收到一个空字符,导致ToByte出现异常……换句话说:
checksum
开头可能包含一些随机值。注意!!!我是多么愚蠢和盲目。。。非常感谢您的帮助和光速!换句话说:
checksum
开头可能包含一些随机值。注意!!!我是多么愚蠢和盲目。。。非常感谢您的帮助和光速!