Как вывести символ в виде целого числа через cout?

#include <iostream>

using namespace std;

int main()
{
char          c1 = 0xab;
signed char   c2 = 0xcd;
unsigned char c3 = 0xef;

cout << hex;
cout << c1 << endl;
cout << c2 << endl;
cout << c3 << endl;
}

Я ожидал, что результат будет следующим:

ab
cd
ef

Тем не менее, я ничего не получил.

Я предполагаю, что это потому, что cout всегда рассматривает ‘char’, ‘signature char’ и ‘unsigned char’ как символы, а не 8-битные целые числа. Тем не менее, ‘char’, ‘signature char’ и ‘unsigned char’ являются целыми типами.

Поэтому мой вопрос: как вывести символ в виде целого числа через cout?

PS: static_cast (…) уродлив и требует дополнительной работы для обрезки лишних битов.

43

Решение

char a = 0xab;
cout << +a; // promotes a to a type printable as a number, regardless of type.

Это работает до тех пор, пока тип предоставляет одинарный + оператор с обычной семантикой. Если вы определяете класс, который представляет число, чтобы предоставить унарный оператор + с канонической семантикой, создайте operator+() это просто возвращает *this либо по значению, либо по ссылке на const.

источник: Parashift.com — Как я могу напечатать символ в виде числа? Как я могу напечатать символ *, чтобы на выходе отображалось числовое значение указателя?

86

Другие решения

Приведите их к целочисленному типу (и, соответственно, к битовой маске!), Т.е.

#include <iostream>

using namespace std;

int main()
{
char          c1 = 0xab;
signed char   c2 = 0xcd;
unsigned char c3 = 0xef;

cout << hex;
cout << (static_cast<int>(c1) & 0xFF) << endl;
cout << (static_cast<int>(c2) & 0xFF) << endl;
cout << (static_cast<unsigned int>(c3) & 0xFF) << endl;
}
9

Может быть, это:

char c = 0xab;
std::cout << (int)c;

Надеюсь, поможет.

6

Еще один способ сделать это с станд :: шестигранной Помимо кастинг (int):

std::cout << std::hex << (int)myVar << std::endl;

Я надеюсь, что это помогает.

0
По вопросам рекламы [email protected]