在C++托管中,调试和安装版本之间的XOR行为不一致
XOR behaving inconsistently between debugging and installed version in C++ managed
我在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;
从未初始化,因此尝试对其进行异或会调用未定义的行为。
相关文章:
- 特征版本 3.2.0 和 3.3.4 之间的数值差异
- 为什么库API+编译器ABI足以确保具有不同版本gcc的对象之间的兼容性
- 检测到 Conan 配置文件设置与 CMake 之间的编译器版本不匹配
- 为什么C++中的表达式类型在不同版本之间会发生变化
- 为什么CRC计算在C和C 版本之间有所不同
- 两个提升版本之间的冲突
- .vcxproj 和 .vcxproj.filters 中的工具版本之间的差异
- boost::v1.59 和 v1.60 之间的序列化存档版本
- g++-8 和早期版本之间的奇怪行为
- 如何在两个版本之间从perforce差异获取C/C 函数名称
- 具有C 接口的C 动态库如何在不同的编译器版本之间不会破坏ABI
- GLIBCXX(libstdc++.so.6)与gcc版本之间的关系
- 游戏"Life"中发布和调试版本之间的加速比例奇怪
- 最新版本的提升和提升几何库 (GGL) 之间的冲突
- 是否可以有一个零成本assert(),这样代码就不必在调试和发布版本之间进行修改
- 如何在不同的MS Office版本之间进行C 应用程序切换
- 如何在本机C++(Windows 7及以前版本)和通用C++(Windows 8及以后版本)应用程序之间共享代码
- 版本之间定义的实现
- C++版本之间的差异
- 调试版本和发布版本之间可能出现的差异