jueves, 24 de enero de 2008

Utilizar colores en C++ para la consola de Linux

Primero creamos un fichero cabecera como sigue:
/** \file   Colors.h
*  \brief  Declaraciones de la clase \c Colors.
*  \author Airam Rodríguez Rivero.
*  \date   11-11-07
*  El propósito de esta clase es la de permitir la utilización de colores
*  utilizando la consola de linux que será donde se envíe el flujo de datos
*  generado por nuestro programa.
*/

#ifndef _COLORS_H_
#define _COLORS_H_

#include 
#include 
#include 

#define Reset      "\033[0m"    // Reset
#define Bold       "\033[1m"    // Brillo o negrita.
#define Underline  "\033[4m"    // Subrayado

// ******************* Foreground Non-lighted Colors *******************

#define Black      "\033[30m"   // Negro
#define Red        "\033[31m"   // Rojo
#define Green      "\033[32m"   // Verde
#define Brown      "\033[33m"   // Marron
#define Blue       "\033[34m"   // Azul
#define Magenta    "\033[35m"   // Magenta
#define Cyan       "\033[36m"   // Cyan
#define White      "\033[37m"   // Blanco

// ******************* Foreground Lighted Colors *******************

#define HBlack     "\033[1m\033[30m" /// bright/bold black
#define HRed       "\033[1m\033[31m" /// b red
#define HGreen     "\033[1m\033[32m" /// b green
#define HYellow    "\033[1m\033[33m" /// b yellow
#define HBlue      "\033[1m\033[34m" /// b blue
#define HMagenta   "\033[1m\033[35m" /// b pink
#define HCyan      "\033[1m\033[36m" /// b cyan
#define HWhite     "\033[1m\033[37m" /// b white

// ******************* Background Non-lighted Colors *******************

#define BBlack      "\033[40m"   // Negro
#define BRed        "\033[41m"   // Rojo
#define BGreen      "\033[42m"   // Verde
#define BBrown      "\033[43m"   // Marron
#define BBlue       "\033[44m"   // Azul
#define BMagenta    "\033[45m"   // Magenta
#define BCyan       "\033[46m"   // Cyan
#define BWhite      "\033[47m"   // Blanco

// ******************* Background Lighted Colors *******************

#define HBBlack      "\033[40;1m"   // Negro
#define HBRed        "\033[41;1m"   // Rojo
#define HBGreen      "\033[42;1m"   // Verde
#define HBBrown      "\033[43;1m"   // Marron
#define HBBlue       "\033[44;1m"   // Azul
#define HBMagenta    "\033[45;1m"   // Magenta
#define HBCyan       "\033[46;1m"   // Cyan
#define HBWhite      "\033[47;1m"   // Blanco

#endif
Ahora podemos hacer cosas como estas:
cout << HBYellow << HRed << "Rojo sobre amarillo" << endl;

¿Cómo convertir un char* a un string con const_cast en C++?

A continuación un ejemplo de const_cast para convertir un char* a un string.
char* chain;
const string str = const_cast<char*>(chain); 

Cómo convertir int, float, char,... a string en C++

Una manera de convertir cualquier tipo de datos a un string es volcarlo a un flujo stringstream y posteriormente extraerlo.
#include <iostream> #include <sstream>
using namespace std;
template <class T>
inline static string toString(const T& t) {
  stringstream ss;
  ss << t;
  return ss.str();
} 
int main() {
 int number = 123;
 cout << toString(number) << endl;
 return 0;
} 

Bienvenido!

El objetivo de este blog es el de aportar soluciones y configuraciones al sistema operativo Kubuntu. Utilizo un Asus F3jc. También aportaré programación en C++ y otros lenguajes de programación, así como otros artículos relacionados con la Ingeniería de informática.