Как заставить uint8_t вести себя как другие целочисленные типы при потоковом вводе / выводе?
Вы не можете. Видимо вы можете.
Если std::uint8_t
является псевдонимом unsigned char
, как обычно (возможно, всегда), то это тип символа, и стандартные потоки обрабатывают его как тип символа.
Вы можете преобразовать его в целочисленный тип без символов перед вставкой в поток:
std::cout << "var = " << static_cast<unsigned>(var) << '\n';
Или с помощью промежуточной переменной:
unsigned temp = var;
std::cout << "var = " << temp << '\n';
Извлечение потока работает толькос использованием метода промежуточных переменных:
unsigned temp;
std::cin >> temp;
var = temp;
В связанной заметке, если вы хотите вывести адрес переменной, то std::cout << &var;
не будет работать, поскольку она будет рассматриваться какстрока с нулевым символом в конце ... которой это не так и, следовательно, приводит к неопределенному поведению. Для этого вы можете использовать std::cout << static_cast<void*>(&var);
.