Lors de l'utilisation de scanf() et de ses variantes, le spécificateur de format %i
acceptera les données comme hex (préfixe "0x"), octal (préfixe "0") ou décimal (pas de préfixe), par exemple les chaînes "0x10" , "020" et "16" sont tous convertis en un nombre entier avec la valeur décimale 16.Est-ce que `std :: istream :: operator >>()` peut accepter les préfixes radix entiers comme le spécificateur de format% i de stdio?
Est-ce que cela peut être fait avec std::istream::operator>>
entrée formatée?
Utilisation simple >> i
sans i/manipulateur o « 0x10 » est convertie à zéro (la partie « x10 » ou plutôt le 0 est, non traitée), et « 020 » à 20. hex
, oct
et dec
manipulateurs se comportent comme %x
, %o
et %d
respectivement. Je suis à la recherche d'un manipulateur général d'entrée qui fonctionne comme %i
. Il est intéressant de noter que le manipulateur hex
accepte à la fois "0x10" et "10" de convertir soit 16 décimales. Si vous vous demandez peut-être, j'implémente un évaluateur d'expression, et j'aimerais que les opérandes entiers soient hexadécimaux, octaux ou décimaux en utilisant la convention de préfixes C/C++. La mise en œuvre actuelle en utilisant sscanf()
le fait automatiquement en utilisant %i
, et je suis curieux de savoir si cela pourrait être modifié pour utiliser iostream sans avoir à analyser explicitement le format numérique.
interestin. +1 Je me demande si le livre C++ IOStreams and Locales a ce genre de choses ... –
Puisque je suis proche de 100%, il n'y a pas d'équivalent direct, je crois que la solution la plus simple et la plus efficace serait d'implémenter un nouveau manipulateur de la forme 'std :: ios_base & integer (std :: ios_base & str);' – Clifford
@Johannes a la réponse, qui fournit également les moyens d'implémenter le manipulateur ci-dessus. – Clifford