Я работаю над кодом ниже:
#include<iostream>
#include<stdio.h>
using namespace std;
main() {
unsigned char a;
a=1;
printf("%d", a);
cout<<a;
}
Это печать 1 и некоторый мусор.
Почему cout ведет себя так?
Я работаю над кодом ниже:
#include<iostream>
#include<stdio.h>
using namespace std;
main() {
unsigned char a;
a=1;
printf("%d", a);
cout<<a;
}
Это печать 1 и некоторый мусор.
Почему cout ведет себя так?
cout << a печатает значение, которое кажется вам мусором. На самом деле это не мусор. Это просто непечатный символ ASCII, который в любом случае печатается. Обратите внимание, что символ ASCII, соответствующий 1 предназначен для печати. Вы можете проверить, является ли можно печатать или не использовать, a std::isprint как:
std::cout << std::isprint(a) << std::endl;
Он напечатает 0 (читай: false), указывая, что символ не может быть напечатан
-
В любом случае, если вы хотите, чтобы ваш cout напечатать 1 также, затем отливали к этому: a
cout << static_cast<unsigned>(a) << std::endl;
У меня была аналогичная проблема здесь, о которой я давно забыл. Разрешение этой проблемы с помощью iostream's cout может быть выполнено следующим образом:
#include<iostream>
#include<stdio.h>
main() {
unsigned char a;
a=1;
printf("%d", a);
std::cout<< +a << std::endl;
return 0;
}
вместо того, чтобы вернуть его другому типу, если вы хотите cout напечатать значение unsigned char в отличие от символа ascii. Вам нужно promote его.
Если вы заметили все, что я сделал, добавьте + до unsigned char. Это унарное дополнение, которое будет способствовать unsigned char, чтобы дать вам фактическое представление числа.
Пользователь Baum mit Augen отвечает за напоминание мне об этом решении.
Вам нужно указать a как целое число cout<< (int)(a);. При этом вы увидите 1 на выходе. С cout << a; печать будет SOH (Start of Heading), соответствующая значению ascii 1, который не может быть напечатан, и, следовательно, наблюдается некоторый специальный символ.
ИЗМЕНИТЬ
Чтобы быть более точным, оператор cout должен быть cout << static_cast<unsigned>(a), как упоминал Наваз.
Я думаю, что компилятор C имеет свой собственный способ определения типа печатного вывода, потому что вы можете указать тип вывода.
Пример: 'uint8_t c = 100;
Е ( "% d", с); , so you can also print c as an int by % d , or char % c , string % s or a hex value % x '.
Там, где C++ имеет свой собственный путь, я думаю, что cout по умолчанию печатает 8-битные значения как char. Таким образом, вы должны использовать спецификаторы с выходным аргументом.
Вы можете использовать:
+ перед именем выходного аргумента 'uint8_t data_byte = 100;cout << "val:" << +data_byte << endl; '
unsigned(var); лайк,'uint8_t data_byte = 100;
cout << "val:" << uinsigned (data_byte) << endl; '
Е ( "% U", а); его так просто попробуйте