Je suis en train d'écrire un manipulateur personnalisé I/O en C++ qui peuvent écrire bien formaté hexadécimaux sous la forme 0xFFFF
en fonction de la taille de l'entier fourni.C++ personnalisé manipulateur d'E/S pour les entiers hexadécimaux
Par exemple:
char c = 1
devient0x01
short s = 1
devient0x0001
Et ainsi de suite. Vous ne trouvez pas l'erreur dans mon code, qui est l'impression des ordures:
#include <iostream>
#include <iomanip>
class hexa_s
{
mutable std::ostream *_out;
template<typename T>
const hexa_s& operator << (const T & data) const
{
*_out << std::internal << std::setfill('0') << std::hex << std::showbase << std::setw(sizeof(T) * 2) << data;
return *this;
}
friend const hexa_s& operator <<(std::ostream& out, const hexa_s& b)
{
b._out = &out;
return b;
}
};
hexa_s hexa()
{
return hexa_s();
}
int main()
{
int value = 4;
std::cout << hexa << value << std::endl;
return 0;
}
Il devrait être soit 'sizeof (T) * CHAR_BIT/4', ou mieux encore,' std :: numeric_limits :: chiffres()/4' (peut-être avec un arrondi approprié). –