Мне смешно с моим управляемым кодом C ++ с Visual 2008. Я уверен, что есть простая причина, по которой это происходит, но я просто упускаю это и немного расстраиваюсь здесь.
Проблема:
Я использую 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, все идеально ...
Я попробовал другой подход с такими же результатами, как показано ниже:
используя массив символов
массив символ ^ = mysentence-> ToCharArray ();
и используя оператор ^ вместо
контрольная сумма = контрольная сумма ^ int (символ [num])
У кого-нибудь был подобный опыт?
Пожалуйста, какой-нибудь совет или свет на это?
Всего наилучшего, Адам