Значения мусора, когда массив объявлен как беззнаковый символ

Когда массив объявлен как unsigned char и инициализирован значениями в диапазоне 0x00-0xff и напечатан с использованием cout, я получаю значения мусора следующим образом

+   (   �           
~   �   �   �   
    �       O   
    �   �   <   

Могу ли я узнать, как использовать use single byte для чисел и при этом иметь возможность использовать cout ?


person Sharat Chandra    schedule 18.02.2012    source источник
comment
мы можем увидеть как код инициализации, так и код печати?   -  person Lefteris    schedule 18.02.2012
comment
Вы пытаетесь напечатать непечатаемые символы.   -  person David Schwartz    schedule 18.02.2012


Ответы (3)


Поскольку это unsigned char, std::cout передает их на терминал и отображает в виде набора символов (ну, во всяком случае, пытается - значения выходят за диапазон допустимых печатных символов для используемого вами набора символов).

Приведение к unsigned int при выводе с cout.

person Brian Roach    schedule 18.02.2012

Типы символов по умолчанию отображаются как символы. Если вы хотите, чтобы они отображались как целые числа, вам придется сначала преобразовать их:

unsigned char value = 42;
std::cout << static_cast<unsigned int>(value);
person Bo Persson    schedule 18.02.2012

Это не мусорные значения. Это то, что представляет персонаж. Чтобы напечатать его как int, просто приведите его к unsigned int во время вывода:

cout << (unsigned int) some_char;
person Matthew Flaschen    schedule 18.02.2012