学校のプロジェクトのために、フグの暗号化 (復号化ではなく暗号化のみ) を作成しています。暗号化自体は完了したので、楽しみのために復号化を行うことにしました (Blowfish では簡単です)。
バイトを表すために unsigned char を使用しました (ただし、uint8_t の方が移植性が高いと思います)。復号化されたバイトを印刷しようとしているときに、私が持っている質問が出てきます。プレーン テキスト メッセージを暗号化しています。暗号化した実際のテキスト メッセージを印刷することができましたが、非常に特定の場所でしか印刷できませんでした。同じ正確なコードは、他の場所では機能しないようです。ここにあります:
int n;
for(n = 0; n < numBlocks; n++) // Blocks are 32-bit unsigned ints (unsigned long)
{
// uchar is just a typedef for unsigned char
// message is an array of uchars
message[n] = (uchar) ((blocks[n]>>24));
message[n+1] = (uchar) ((blocks[n]>>16));
message[n+2] = (uchar) ((blocks[n]>>8));
message[n+3] = (uchar) ((blocks[n]));
// Printing works here; exact message comes back
printf("%c%c%c%c", message[n], message[n+1], message[n+2], message[n+3]);
}
しかし、2 行後にまったく同じコードを使用しようとすると、機能しません。
for(n = 0; n < numBlocks; n++)
{
// Printing doesn't work here.
// Actually, the first letter works, but none of the others
printf("%c%c%c%c", message[n], message[n+1], message[n+2], message[n+3]);
}
文字を数値形式でも出力してみましたが、実際に変わっていることがわかります。
ここで何が起こっているのですか?これは未定義の動作ですか?誰にも信頼できる解決策はありますか?2 つの呼び出しの間にメッセージ配列の値を変更することは何もしていません。
これを、sparc プロセッサを搭載した Sun 5.10 で実行およびコンパイルしています。