void DumpCode(const char* str) {
for (int i = 0; str[i] != '\0'; ++i) {
printf("%02X ", (unsigned char)str[i]);
}
cout << endl;
}

↑の文字コードを16進数で表示する関数ですが、なぜ

printf("%02X ", str[i]);

ではなく、

printf("%02X ", (unsigned char)str[i]);

とキャストしているのでしょうか?