OVH Cloud OVH Cloud

Creer une RWCString a partir d'un long ?

5 réponses
Avatar
Simon Legris
Comment fait'on, SVP ?

J'ai essayé ca, trouvé sur le ouebe:

long monLong = 95527001;
RWCString maChaine;
RWLocaleSnapshot * local = new RWLocaleSnapshot("");
maChaine = local->asString(monLong);


mais lorsque j'essaye de lire maChaine.data() (en sortie formatée par
exemple), j'ai des caracteres bizarres supplementaires qui s'affichent
du style "95à527à001" ...

Je dois louper un truc.



--
Il y a 10 sortes de gens, ceux qui savent compter en binaire et les
autres...

5 réponses

Avatar
Serge Paccalin
Le mercredi 7 décembre 2005 à 17:39:46, Simon Legris a écrit dans
fr.comp.lang.c++ :

Comment fait'on, SVP ?


(Psst : « fait-on »).

J'ai essayé ca, trouvé sur le ouebe:

long monLong = 95527001;
RWCString maChaine;
RWLocaleSnapshot * local = new RWLocaleSnapshot("");
maChaine = local->asString(monLong);

mais lorsque j'essaye de lire maChaine.data() (en sortie formatée par
exemple), j'ai des caracteres bizarres supplementaires qui s'affichent
du style "95à527à001" ...

Je dois louper un truc.


Je ne connais pas RWCString, ça doit être spécifique à une bibliothèque.
Mais tes « 95à527à001 » m'interpellent. Sous Windows, l'espace insécable
apparaît sous la forme d'un « á » quand on l'affiche dans une console
sans prendre la précaution de convertir vers la bonne page de code.

--
___________ 07/12/2005 18:12:54
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763

Avatar
kanze
Serge Paccalin wrote:
Le mercredi 7 décembre 2005 à 17:39:46, Simon Legris a écrit
dans fr.comp.lang.c++ :

Comment fait'on, SVP ?


(Psst : « fait-on »).

J'ai essayé ca, trouvé sur le ouebe:

long monLong = 95527001;
RWCString maChaine;
RWLocaleSnapshot * local = new RWLocaleSnapshot("");
maChaine = local->asString(monLong);

mais lorsque j'essaye de lire maChaine.data() (en sortie
formatée par exemple), j'ai des caracteres bizarres
supplementaires qui s'affichent du style "95à527à001" ...

Je dois louper un truc.


Je ne connais pas RWCString, ça doit être spécifique à une
bibliothèque.


RW est le préfixe qu'utilise Rogue Wave. J'imagine donc qu'il
s'agit de la bibliothèque Rogue Wave.

Mais tes « 95à527à001 » m'interpellent. Sous Windows, l'espace
insécable apparaît sous la forme d'un « á » quand on l'affiche
dans une console sans prendre la précaution de convertir vers
la bonne page de code.


La valeur hex de son constante contient bien un A0 (qui est le
code pour un espace inseccable). Mais je ne retrouve rien
d'autre là dedans.

S'il a le choix, la solution évident ici serait de laisser
tomber la bibliothèque non standard, et d'utiliser celle
standard :

std::ostringstream s ;
s << monLong
maChain = s.str() ;

Ça me semble aussi simple, et a les avantages qu'il fonctionne
partout et qu'on saurait l'aider s'il a des problèmes.

--
James Kanze GABI Software
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
Simon Legris
Re-bienlebonjour.

J'ai reglé mon probleme en construisant differemment ma RWCString
via la fonction de la stdlib *ltoa*:


long monLong = 95527001;
RWCString maChaine;

char t_chaine[15];
ltoa (monLong,t_chaine,10);
maChaine.append(t_chaine);


le printf(%s) de maChaine.data() est OK maintenant...
Avatar
Serge Paccalin
Le jeudi 8 décembre 2005 à 09:06:07, kanze a écrit dans
fr.comp.lang.c++ :

Mais tes « 95à527à001 » m'interpellent. Sous Windows, l'espace
insécable apparaît sous la forme d'un « á » quand on l'affiche
dans une console sans prendre la précaution de convertir vers
la bonne page de code.


La valeur hex de son constante contient bien un A0 (qui est le
code pour un espace inseccable). Mais je ne retrouve rien
d'autre là dedans.


Dans la page de codes 850, héritée de MS-DOS, la valeur A0 code le
« á ». Un appel à CharToOem() permettrait d'obtenir et afficher la bonne
chaîne.

S'il a le choix, la solution évident ici serait de laisser
tomber la bibliothèque non standard, et d'utiliser celle
standard :

std::ostringstream s ;
s << monLong
maChain = s.str() ;

Ça me semble aussi simple, et a les avantages qu'il fonctionne
partout et qu'on saurait l'aider s'il a des problèmes.


Sans doute, mais il n'a plus de séparateur des milliers (c'est le rôle
des espaces insécables dans les nombres, en français), ce qui est
franchement dommage pour la lisibilité.

--
___________ 08/12/2005 19:02:34
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763


Avatar
kanze
Serge Paccalin wrote:
Le jeudi 8 décembre 2005 à 09:06:07, kanze a écrit dans
fr.comp.lang.c++ :

Mais tes « 95à527à001 » m'interpellent. Sous Windows,
l'espace insécable apparaît sous la forme d'un « á » quand
on l'affiche dans une console sans prendre la précaution de
convertir vers la bonne page de code.


La valeur hex de son constante contient bien un A0 (qui est
le code pour un espace inseccable). Mais je ne retrouve rien
d'autre là dedans.


Dans la page de codes 850, héritée de MS-DOS, la valeur A0
code le « á ». Un appel à CharToOem() permettrait d'obtenir et
afficher la bonne chaîne.


D'accord. J'ai compris. (C'est bizarre, mais je n'avais pas
rémarqué que les autres caractères étaient bien la
représentation ASCII du nombre.)

S'il a le choix, la solution évident ici serait de laisser
tomber la bibliothèque non standard, et d'utiliser celle
standard :

std::ostringstream s ;
s << monLong
maChain = s.str() ;

Ça me semble aussi simple, et a les avantages qu'il
fonctionne partout et qu'on saurait l'aider s'il a des
problèmes.


Sans doute, mais il n'a plus de séparateur des milliers (c'est
le rôle des espaces insécables dans les nombres, en français),
ce qui est franchement dommage pour la lisibilité.


Il suffit d'imbuer s avec le bon locale.

De même, si on l'imbue d'un locale pour la page de code voulue,
il doit générer correctement pour cette page de code.

--
James Kanze GABI Software
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