Si quieres hacer la conversión en modo texto, tienes múltiples opciones. La más propia de C++ es utilizar el stream de cadenas, o stringstream. La idea es introducir datos en un stream, tal y como se haría con, por ejemplo, cout, y obtener una cadena de texto. Para ello, necesitaremos un stringstream de salida, es decir, un ostringstream. Estas clases están en la cabecera sstream.
ostringstream cnvt;
cnvt << 32.121;
cout << cnvt.str() << endl;
Si quieres hacer la conversión binaria, puedes hacerlo de dos maneras, las dos "a la antigua":
Copia el contenido de la memoria de uno en otro:
char bytes[sizeof(double)];
double x = 32.121;
// Copying memory
memcpy( bytes, &x, sizeof(x) );
for(int i = 0; i < sizeof( x ); ++i) {
cout << bytes[ i ] << ' ';
}
Al copiar desde el inicio de x (&x
), el número de bytes que ocupa x (sizeof(x)
), te aseguras de estar copiando el contenido entero de la variable. El array de destino debe tener el mismo tamaño, claro.
Utiliza una union
Las union casi no se usan hoy en día, si bien para este caso encajan como un guante. Todos los miembros de una union comienzan en la misma dirección de memoria, por lo que al modificar uno de ellos, los estás modificando todos a la vez.
union Conversor {
char bytes[sizeof( double )];
double x;
};
Así, la modificar Conversor.x, obtenemos el valor convenientemente descompuesto en Conversor.bytes.
Conversor cnvt;
cnvt.x = 32.121;;
for(int i = 0; i < sizeof( x ); ++i) {
cout << cnvt.bytes[ i ] << ' ';
}
Tienes el código completo en IDEOne.