web-dev-qa-db-fra.com

comment formater des nombres hexadécimaux en utilisant stringstream

J'essaie de convertir un court non signé en sa représentation hexadécimale en majuscules et préfixé de 0 en utilisant stringstream. Je n'arrive pas à obtenir les majuscules et les 0 corrects. voici ce que j'ai maintenant:

USHORT id = 1127;
std::stringstream ss;
ss << std::showbase << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;
std::string result = ss.str();

il en résulte que la base "0x" préfixée est également en majuscule mais je veux que ce soit en minuscule. il en résulte également aucun 0 préfixé à la valeur hexadécimale après la base 0x préfixée (actuellement 0X). par exemple, cela produira désormais 0X467 au lieu du 0x0467 attendu. Comment puis-je réparer ça?

21
mtijn

setw va définir la largeur de l'ensemble de la sortie formatée, y compris la base affichée, c'est pourquoi vous ne voyez pas le premier 0. De plus, il n'y a aucun moyen d'afficher la base en minuscules si vous utilisez std::showbase de même que std::uppercase. La solution consiste à insérer la base manuellement, puis à appliquer les manipulateurs restants.

ss << "0x" << std::uppercase << std::setfill('0') << std::setw(4) << std::hex << id;

Cela génère 0x0467

41
Praetorian