2010-03-02 13 views
10

El pequeño programa de prueba a continuación imprime:¿Cómo se utiliza un manipulador para dar formato a mi producción hexagonal con ceros izquierda acolchados

y el número de SS es = 3039

Me gustaría que el número de imprimir con acolchado ceros a la izquierda de tal manera que la longitud total es de 8. Por lo tanto:

y el número de SS es = 00003039 (nótese los ceros adicionales que quedan acolchada)

y me gustaría saber cómo hacer esto utilizando manipuladores y un stringstream como mostrado a continuación. ¡Gracias!

El programa de pruebas:

#include <iostream> 
#include <sstream> 
#include <string> 
#include <vector> 

int main() 
{ 

    int i = 12345; 
    std::stringstream lTransport; 

    lTransport << "And SS Number IS =" << std::hex << i << '\n'; 

    std::cout << lTransport.str(); 

} 

Respuesta

9

¿Has mirado en setfill de la biblioteca y manipuladores setw?

#include <iomanip> 
... 
lTransport << "And SS Number IS =" << std::hex << std::setw(8) ; 
lTransport << std::setfill('0') << i << '\n'; 

La salida que recibo es:

And SS Number IS =00003039 
+0

Si soy agregar cosas antes y después del h formateado por ejemplo, ¿cómo afectan el relleno y el ancho a las cosas? ¿Hay alguna forma de que solo se apliquen al hex formado y no a todo el stringstream? – bbazso

+0

Edité mi respuesta para agregar el código. Espero que funcione para ti. Oh! Parece que "Let_Me_Be" me ganó. –

+0

Después de configurar los formateadores y escribir en el stringstreamm para el entero, puede reajustar el setw() y setfill() como desee. Alternativamente, también podría preformatear una cadena c usando sprintf (char_buf, '% 08X', i) y escribirla en la cadena de caracteres. –

2

me gustaría utilizar:

cout << std::hex << std::setw(sizeof(i)*2) << std::setfill('0') << i << std::endl; 
+0

¿No puedes decir 'std :: setw (8)'? Después de todo, eso es lo que el OP dice que quiere. –

+0

@Kristo Oh, sí, setw (8) estaría bien, pasé por alto que siempre quiere 8 caracteres. Esto funcionará con tamaño de bit. –

1

Puede utilizar setw y setfill funciones de la siguiente manera:

#include <iostream> 
#include <sstream> 
#include <string> 
#include <vector> 
#include <iomanip> 

using namespace std; 

int main() 
{  
    int i = 12345; 
    std::stringstream lTransport; 

    lTransport << "And SS Number IS =" << setfill ('0') << setw (8)<< std::hex << i << '\n';  
    std::cout << lTransport.str(); // prints And SS Number IS =00003039  
} 
Cuestiones relacionadas