2012-03-13 3 views
0

Visual C++で管理されたC++コードで面白いことが起こっています。これは単純な理由があると確信していますが、ここではイライラした。C++でデバッグとインストールされたバージョン間でXORが一貫して動作しない

問題: 私はXORを使用して、送信されたセンテンスのチェックサムを評価しています。まあ、それはデバッグで完璧に動作し、私はリリースとしてビジュアルから実行する場合、私はインストーラを構築し、リリースをインストールすると、同じマシンでは、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; 
    } 
} 

注私は、私はそこにデバッガを使用することはできませんし、私は、Visual Studioでデバッグするとき、すべてが完璧であるとしてインストールすると、値を確認するために使用していますメッセージボックス... 私が持っています次のような結果を返そうとしました。 char配列を使用しています array^character = mysentence-> ToCharArray(); 代わりに演算子^を使用する チェックサム=チェックサム^ int(文字[num])

誰も同じような経験をしていますか? お願いします、これに関するアドバイスや光はありますか?

すべてのベストアダム

+0

なぜあなたはそこにtry-catchを持っていますか? – sth

+0

文章はラジオで受信され、非常に汚れています。時々私はToByteの例外を発生させるヌル文字を受け取ります... – Aznarepse

答えて

3

int checksum;初期化しないので、それとのXORしようとすると、未定義の振る舞いを呼び出すん。

+1

つまり、 'checksum'はおそらく最初にいくつかのランダムな値を含んでいます。 – sth

+0

スポットに!どのように愚かで盲目でしたか...あなたの助けと光のスピードをどうもありがとう! – Aznarepse

関連する問題