Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Equivalent printf

20 réponses
Avatar
Guillaume GOURDIN
Bonjour à tous,

quel serait l'équivalent c++ d'un printf("%04x") ?

Merci pour votre aide.

10 réponses

1 2
Avatar
James Kanze
On Feb 5, 2:52 pm, Jean-Marc Bourguet wrote:
James Kanze writes:
(après des vérifications de rigueur,
évidemment -- base 0 fonctionnait comme attendu, base 1
était interdit, de même que des bases supérieur à 36).


Quel sens donnes-tu a base 0?


Celui qu'il a pour stdtol et stdtoul -- si le nombre commence
par "0x" ou "0X", c'est hexadécimal, sinon s'il commence par
"0", c'est octal, sinon, c'est décimal.

Par contre je vois un sens a base 1 si on admet une difference
entre 0 et pas de chiffre. On ne peut pas representer 0, mais
par apres on a par exemple: 7_{10} = 1111111_{1}.


Ça serait 0000000_{1}, peut-être. Une des règles de base, c'est
que les chiffres légaux sont dans l'intervale [0;base[.

Ce n'est
pas tellement different de la representation alphabetique qui
nous avait amuse il y a quelques annees (ou 29 est represente
par AC).


C'est quoi comme représentation ? Je ne le connais pas, et je
ne vois pas comment je pourrais tirer 29 de AC.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Mickaël Wolff
C'est quoi comme représentation ? Je ne le connais pas, et je
ne vois pas comment je pourrais tirer 29 de AC.


Il y a 26 lettres dans l'alphabet ;)

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Avatar
Jean-Marc Bourguet
James Kanze writes:

Par contre je vois un sens a base 1 si on admet une difference
entre 0 et pas de chiffre. On ne peut pas representer 0, mais
par apres on a par exemple: 7_{10} = 1111111_{1}.


Ça serait 0000000_{1}, peut-être. Une des règles de base, c'est
que les chiffres légaux sont dans l'intervale [0;base[.


Mais pas dans ce cas la.

http://fr.wikipedia.org/wiki/Syst%C3%A8me_unaire

Ce n'est pas tellement different de la representation alphabetique qui
nous avait amuse il y a quelques annees (ou 29 est represente par AC).


C'est quoi comme représentation ? Je ne le connais pas, et je
ne vois pas comment je pourrais tirer 29 de AC.


Voir le fil "Convertir un nombre en lettres" de juin 2005.

http://en.wikipedia.org/wiki/Bijective_numeration

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org


Avatar
Aris
On Feb 5, 2:52 pm, Jean-Marc Bourguet wrote:
James Kanze writes:
(après des vérifications de rigueur,
évidemment -- base 0 fonctionnait comme attendu, base 1
était interdit, de même que des bases supérieur à 36).


Quel sens donnes-tu a base 0?


Celui qu'il a pour stdtol et stdtoul -- si le nombre commence
par "0x" ou "0X", c'est hexadécimal, sinon s'il commence par
"0", c'est octal, sinon, c'est décimal.

Par contre je vois un sens a base 1 si on admet une difference
entre 0 et pas de chiffre. On ne peut pas representer 0, mais
par apres on a par exemple: 7_{10} = 1111111_{1}.


Ça serait 0000000_{1}, peut-être. Une des règles de base, c'est
que les chiffres légaux sont dans l'intervale [0;base[.

Ce n'est
pas tellement different de la representation alphabetique qui
nous avait amuse il y a quelques annees (ou 29 est represente
par AC).


C'est quoi comme représentation ? Je ne le connais pas, et je
ne vois pas comment je pourrais tirer 29 de AC.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
il y a le très connus base-64 ou un nombre de 0 à (2^6)-1 est représenté

par A-Z,a-z,0-9, et un autre caractère (26 + 26 + 10 +1 + 1 = 64)



Avatar
James Kanze
On Feb 6, 10:51 am, Jean-Marc Bourguet wrote:
James Kanze writes:
Par contre je vois un sens a base 1 si on admet une difference
entre 0 et pas de chiffre. On ne peut pas representer 0, mais
par apres on a par exemple: 7_{10} = 1111111_{1}.


Ça serait 0000000_{1}, peut-être. Une des règles de base,
c'est que les chiffres légaux sont dans l'intervale
[0;base[.


Mais pas dans ce cas la.

http://fr.wikipedia.org/wiki/Syst%C3%A8me_unaire

Ce n'est pas tellement different de la representation
alphabetique qui nous avait amuse il y a quelques annees
(ou 29 est represente par AC).


C'est quoi comme représentation ? Je ne le connais pas, et
je ne vois pas comment je pourrais tirer 29 de AC.


Voir le fil "Convertir un nombre en lettres" de juin 2005.

http://en.wikipedia.org/wiki/Bijective_numeration


OK. J'avoue que je n'ai considéré que la représentation
positionnelle classique (avec un 0). Pour d'autres systèmes, je
crois que je préfèrerais ajouter des flags, plutôt que jouer sur
la base. Disons un flag pour bijectif, et -- pourquoi pas --
un pour texte :

std::cout << 10 << ' ' << 15 << std::endl ;
std::cout.setf( std::ios::bijective ) ;
std::cout << 10 << ' ' << 15 << std::endl ;
std::cout.setf( std::ios::text ) ;
std::cout << 10 << ' ' << 15 << std::endl ;

Sortirait :
10 15
A 15
dix quinze
(en locale fr_FR, évidemment -- l'implémentation pour tous les
locales est laissée comme exercise pour le lecteur).

Mais je me démande ce que doit être les sorties dans le cas de :

std::cout.setf( std::ios::hex, std::ios::basefield ) ;
std::cout.setf( std::ios::text ) ;

« zéro A » et « zéro F ». (Avec plus ou moins de « zéro » ,
selon l'utilisation.) On pourrait dire que si la base n'est pas
égale à dix, on sort les chiffres un par un en texte, mais ça me
semble plutôt un rôle pour un autre flag.

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
Alain Migeon
On Wed, 06 Feb 2008 10:04:14 +0100, Mickaël Wolff
wrote:

C'est quoi comme représentation ? Je ne le connais pas, et je
ne vois pas comment je pourrais tirer 29 de AC.


Il y a 26 lettres dans l'alphabet ;)



3 de plus si on rajoute les lettres nordiques : æ, ø et å. ;-))

______________________________________________________
Alain Migeon
Please reverse alain and migeon for replying.


Avatar
Mickaël Wolff
3 de plus si on rajoute les lettres nordiques : æ, ø et å. ;-))


Certes, je parlais d'alphabet latin. Mais on peut aller loin si on
commence à rajouter l'ensemble des symboles existants ou ayant existés.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org

Avatar
James Kanze
On Feb 7, 11:24 am, "Alain Migeon" wrote:
On Wed, 06 Feb 2008 10:04:14 +0100, Mickaël Wolff

wrote:
C'est quoi comme représentation ? Je ne le connais pas, et je
ne vois pas comment je pourrais tirer 29 de AC.


Il y a 26 lettres dans l'alphabet ;)


3 de plus si on rajoute les lettres nordiques : æ, ø et å. ;-))


egrep 'LATIN CAPITAL LETTER' UnicodeData.txt | wc -l

m'affiche 431:-).

Ceci dit, je crois que pour de telles utilisations,
internationalisation ou non, je crois que c'est raisonable à se
limiter aux 26 habituelles. (Bien que le latin n'en avait que
21.)

:-)

--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
Alain Migeon
On Thu, 07 Feb 2008 12:05:03 +0100, Mickaël Wolff
wrote:

3 de plus si on rajoute les lettres nordiques : æ, ø et å. ;-))


Certes, je parlais d'alphabet latin. Mais on peut aller loin si on
commence à rajouter l'ensemble des symboles existants ou ayant existés.


En effet.
Ceci dit, les lettres æ, ø et å en danois et norvégien, et ä, ö et å en
suédois, sont considérées dans ces pays comme des lettres à part entière,
et classées dans cet ordre à la fin de l'alphabet.

Quand on regarde dans un dictionnaire français, on trouve des mots
commençant par æ, mais ils sont classés comme ae.

Donc, si on se repositionne en programmation C++ ou autre, il faut tenir
compte du lieu géographique pour les algorithmes de tri.


--
______________________________________________________
Alain Migeon
Please reverse alain and migeon for replying.


Avatar
Arnaud Meurgues

Mais je me démande ce que doit être les sorties dans le cas de :

std::cout.setf( std::ios::hex, std::ios::basefield ) ;
std::cout.setf( std::ios::text ) ;

« zéro A » et « zéro F ». (Avec plus ou moins de « zéro »,
selon l'utilisation.) On pourrait dire que si la base n'est pas
égale à dix, on sort les chiffres un par un en texte, mais ça me
semble plutôt un rôle pour un autre flag.


À mon sens, une sortie textuelle n'a pas de sens en dehors de la bse
dix. J'aurais donc dit qu'on peut s'attendre à deux comportements :
- soit le texte sort toujours le nombre en texte base dix, en
ignorant la base
- soit le texte ne sort le nombre textuellement qu'en base 10 et n'a
aucun effet pour les autres bases.

--
Arnaud

1 2