Я свел проблему к типо-типизации из вывода atoi (). По сути, я передаю string.c_str () в atoi (), и я могу ‘cout’ значение, как я и ожидал (32). Однако, если я сделаю Typecast, как это:
string num = "32";
unsigned char x = (unsigned char)atoi(num.c_str());
cout << x << endl;
Тогда x в конечном итоге не имеет ЛЮБОГО значения. Это не просто 0 или что-то, но NULL. Что дает?
char
представляет символы символов. Когда вы распечатаете его через поток, вы увидите ASCII-символ. 32 является кодом space
символ в коде ASCII, поэтому вы ничего не видите.
char
Значение представляет символ, поэтому при печати его символа в потоке отображается сам символ, а не его числовой код.
Если числовое значение печатаемого символа представлено печатной буквой ASCII, такой как значение 65, соответствующее букве A
, вы увидите букву, отображаемую в выводе консоли / терминала. В вашем примере числовой код 32, что соответствует пробелу, который останется невидимым. Числовой код 0 может привести к некоторому представлению двоичного символа NUL, который будет напечатан вашим терминалом.