この問題を、atoi() の出力からの型キャストの問題に要約しました。基本的に、string.c_str() を atoi() に渡すと、期待どおりに値を「計算」できます (32)。ただし、次のような型キャストを行うと:
string num = "32";
unsigned char x = (unsigned char)atoi(num.c_str());
cout << x << endl;
次に、 x は値を持たないことになります。0 か何かではなく、NULL です。何を与える?