Как выводить символ как целое через cout?
#include 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», «signed char» и «unsigned char» как символы, а не 8-битные целые числа. Тем не менее, «char», «signed char» и «unsigned char» являются целыми типами.
- Преобразование float в std :: string в C ++
- Почему я не могу использовать интерфейс с явным оператором?
- Преобразуйте столбец данных в 1 или 0 для значений «истина» / «ложь» и назначьте в dataframe
- C # конвертировать целое число в шестнадцатеричный и обратно
- Проверьте, является ли объект типом classа
Поэтому мой вопрос: как выводить символ как целое число через cout?
PS: static_cast (…) является уродливым и требует больше работы для обрезки дополнительных бит.
- Java условный оператор?: Тип результата
- Целочисленные преобразования (сужение, расширение), неопределенное поведение
- Подписано на неподписанное преобразование в C - всегда ли оно безопасно?
- Неявное VS-явное преобразование
- Конвертировать сразу несколько столбцов кадра данных
- Как преобразовать числа между шестнадцатеричным и десятичным в C #?
- Как преобразовать строку с точкой и запятой в float в Python
- Преобразование NSString в массив символов
char a = 0xab; cout << +a; // promotes a to a type printable as a number, regardless of type.
Это работает до тех пор, пока тип предоставляет унарный +
оператор с обычной семантикой. Если вы определяете class, представляющий число, чтобы предоставить унарный + оператор с канонической семантикой, создайте operator+()
который просто возвращает *this
либо по значению, либо по ссылке-на-const.
источник: Parashift.com - Как я могу напечатать символ в виде числа? Как я могу напечатать символ *, чтобы на выходе отображалось числовое значение указателя?
Передайте их целочисленному типу (и битмаску соответственно!), То есть:
#include using namespace std; int main() { char c1 = 0xab; signed char c2 = 0xcd; unsigned char c3 = 0xef; cout << hex; cout << (static_cast(c1) & 0xFF) << endl; cout << (static_cast (c2) & 0xFF) << endl; cout << (static_cast(c3) & 0xFF) << endl; }
Может быть, это:
char c = 0xab; std::cout << (int)c;
Надеюсь, поможет.
Другой способ сделать это: std :: hex отдельно от casting (int) :
std::cout << std::hex << (int)myVar << std::endl;
Я надеюсь, что это помогает.