std::cout << characterVariable (Есть ли манипуляторы, чтобы можно вывести не символ, а число?)

Модератор: Модераторы разделов

Аватара пользователя
Zeus
Сообщения: 694

std::cout << characterVariable

Сообщение Zeus »

Код: Выделить всё

#include <iostream>

int
main ()
{
 unsigned char oneByte = 0x31;
 std::cout << oneByte << std::endl;
 return 0;
};

Такой код выведет в консоль символ '1'.

А хотелось бы что-нибудь вроде:
std::cout << std::выводить_число_а_не_символ_блин << oneByte << std::endl;


Что-то пока не нашёл такой манипулятор.
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: std::cout << characterVariable

Сообщение Alxn1 »

А если так:

std::cout << static_cast< unsigned int >( oneByte ) << std::endl;
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: std::cout << characterVariable

Сообщение Zeus »

Всякие приведения типов - это понятно, что прокатит.
Я думал манипулятор есть.
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: std::cout << characterVariable

Сообщение Alxn1 »

А черт его знает, но вроде как нет такого манипулятора:
http://www.halpernwightsoftware.com/stdlib...ckref.html#io10

Что, наверное, логично, так как в данном случае простое приведение типов с этим замечательно справляется.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: std::cout << characterVariable

Сообщение Zeus »

Ну ладно, пусть тогда остаётся приведение.

Спасибо.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: std::cout << characterVariable

Сообщение serzh-z »

Zeus
В STL нет, но в BOOST есть boost::numeric_cast (и много других шаблонов для кастования).

Т.е. можно было бы сделать так:

Код: Выделить всё

std::count << boost::numeric_cast<unsigned int>(oneByte);
или даже

Код: Выделить всё

std::count << boost::numeric_cast<unsigned int>("789")
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: std::cout << characterVariable

Сообщение sim1 »

по аналогии с бустом можно так

Код: Выделить всё

#ifndef __Utils_Convert_h
#define __Utils_Convert_h

template < typename T,typename V >
T cast(V & val)
{
    return static_cast<T>( V );
}

#endif

тогда

Код: Выделить всё

char oneByte = 0x31;
std::count << cast<unsigned int>(oneByte) << std::endl;
Спасибо сказали:
Аватара пользователя
Dem0n3D
Сообщения: 23
ОС: Ubuntu 10.10 32bit

Re: std::cout << characterVariable

Сообщение Dem0n3D »

И вы утверждаете, что удобнее использовать

Код: Выделить всё

std::count << boost::numeric_cast<unsigned int>(oneByte);
чем

Код: Выделить всё

std::cout << static_cast< unsigned int >( oneByte ) << std::endl;
?! Не пойму: чем же этот бустовский вариант лучше встроенного?
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: std::cout << characterVariable

Сообщение Zeus »

Наверное ничем.
И boost нужно иметь.
Спасибо сказали: