C+;中调试版本和安装版本之间的异或行为不一致+;管理 我用Visual 2008对我的C++托管代码进行了有趣的操作。我相信这是一个简单的原因,但我只是错过了它,并在这里感到有点沮丧
问题是: 我使用XOR来计算传输语句的校验和。好吧,它在调试中工作得完美无缺,如果我从visual as release运行,但是当我在同一台机器上构建安装程序并安装该版本时,XOR的行为完全不同,给了我不同的值。ie在调试中给我44,在安装版本中给我79E721FC 守则: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
{
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
开头可能包含一些随机值。注意!!!我是多么愚蠢和盲目。。。非常感谢您的帮助和光速!