Dovrebbero esserci diverse classi in giro per la rete che fanno al caso tuo
("use the Google, Luke!"

)
prova ad esempio a vedere:+
http://www.google.com/search?q=ratio...utf-8&oe=utf-8
http://www.google.com/search?hl=en&l...=Google+Search
Per la base, se controlli la documentazione

degli ostream vedrai che hai due alternative:
1) impostare opportunamente il canale:
Codice:
#include <ios>
using namespace std;
/* blah blah blah */
/* out e' un ostream */
out.setf( ios_base::hex , ios_base::basefield );
out << 44;
2) usare i manipolatori
Codice:
#include <ios>
using namespace std;
out << hex << 44;
Nel primo caso il canale continua a scrivere in formato esadecimale finche' non lo cambi nuovamente. Nel secondo caso il formato esadecimale e' valido
solo per il primo
valore che scrivi.
Caveats:
Non sono sicuro del codice qui sopra (in particolare se la libreria inclusa e' quella corretta), sono almeno 5 mesi che non ci metto le mani sopra.
Probabilmente avrai bisogno di un compilatore recente/decente (scorda quello microsoft

) per compilare il secondo esempio (se non pure il primo...)