Беззнаковый символ печатает его значение ascii - PullRequest
0 голосов
/ 16 июня 2020

У меня есть программа на C ++, которая читает из двоичного файла байт за байтом , а затем выводит его как символ на консоль.

После использования unsigned char в качестве типа консоль напечатает его значение ascii, чего я не ожидал.

Как заставить его печатать символ вместо его значения ascii ?

Это выглядит примерно так:

/* ...... */
unsigned char crap;
crap = some_char[i];
cout << crap;
/* ...... */

EDIT (2): Еще раз извините, теперь я обнаружил воспроизводимую проблему. Вот она:

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    unsigned char a;
    a = 'A';
    cout << (a > 31 ? a : '.');
 }

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Последняя проблема вызвана смешением типов в условном выражении.

unsigned char a;
...
cout << (a > 31 ? a : '.');

Это выражение имеет тип int, потому что ни один из типов char не является достаточно большим, чтобы включать все значения другого. (Приносим извинения, если предыдущий оператор не совсем точен, мне не хочется читать мелкий шрифт.)

Просто приведите один символ, чтобы оба типа результатов для условного выражения были одинаковыми, например a > 31 ? a : (unsigned char)'.'.

0 голосов
/ 16 июня 2020

вы не можете преобразовать его в char вместо использования cout << (a> 31? A: '.'); вы можете просто распечатать cout << <strong>(char) (a> 31? A: '.'); .

...