J'ai déjà discuter de l'unicode dans un autre sujet, qui n'avait rien a voir
Donc en tenant compte de tes remarques fredericmazue, je vais exposer mon problème (c'est à dire la localisation et le fait qu'on soit qu'en 16bits).
J'ai des codes Hexa dans un tableau d'int correspondant à de l'unicode (travail en binaire).
Sauf que j'aimerai pouvoir incrire/traduire ces codes dans un fichier sous forme de caractère UNICODE!
si je fais la méthode quelque peu "bourrin"
wstring ws= L"\u0034";
je peux facilement inscrire ce code dans un fichier.
sauf que j'ai que les codes et que passer par un wostringstrem ne me permet pas de faire la même chose :
wostringstream ows; ows<<L"\u"<<codeHEXA; // codeHEXA étant un int
car le \u n'englobe pas codeHexa;
Comment puis-je écrire tout mes codes sous forme UNICODE dans un fichier?
Je ne suis pas sûr d'avoir bien capté la question, mais pourquoi tout simplement ne pas concaténer deux chaînes ?
D'abord tu transformes le nb HEXA en chaîne. Aucune difficulté et tu obtiens "HEXA"
Et après
string s = "\u" + "HEXA";
wstring ws= L(s.c_str());
Est-ce que ça correspond HEXActement à ton problème :)
Oui c'est bien le principe.
Oula tu as trop fais de JAVA là :P : je suis obligé de passer pas un ostrinstream pour la concaténation car l'opérateur + n'est pas prévu pour ça, comme en JAVA (je crois...) ;) ou alors je viens d'apprendre quelque chose.
sinon la focntion L() mon compilateur ne l'accepte pas ( opérateur "L" non défini), c'est pas plutot la fonction _TCHAR ? Mais même là la conversion semble pas correcte : soit c'est un problème de type soit ça vient de moi...
Hé m'insultes pas hein :lol:
OUI/NON
Oui on ne peut pas additionner deux pointeurs comme ça.
J'ai juste voulu te décrire l'idée rapidemeent. ce en quoi j'ai eu tort manifestement :)
NON tu n'es pas obligé de passer par un ostringstream pour la concaténation (si on parle bien de la même chose). Concaténer est très simple
s = string("\u") + string("HEXA");
C'est évidemment ce que je voulais dire
Edit:
Oui bien sûr. je voulais dire convertir string en wstring. Je ne voulais pas fournir du code clé en main C'est vrai que j'aurais pu m'exprimer autrement. Mais j'étais très pressé. J'ai eu tort de toutes façons :oops:.
J'aurais du attendre d'avoir un moment de calme.
Pour le reste on verra peut être tout à l'heure, je dois te laisser là.
Bon me revoilà pour 5 minutes.
Reprenons à la base. Déjà
Ca m'étonnerait que ça marche.
Alors on va partir sur L"\u0024";
Bon tu m'as enduit d'erreur avec tes chaînes là :twisted: :lol:
Il s'agit de manipuler des *caractères* unicode.
Donc je reviens à ce que je disais. Ta valeur HEXA tu peux facilement en faire une chaîne.
Mettons 0024 -> devient "0024"
Ensuite c'est comme ça (et cette fois c'est du "vrai" code" :) )
Et tu as ton caractère UNICODE
Car j'ai bien compris la question n'est-ce pas ? Tu as une valeur et tu veux en faire un caractère UNICODE, c'est bien ça ?
Héhéhé :P :P
Non non tu n'a pas eu tord mais je voulais te charier un peu avec JAVA :D
mbtowc (&wt, s.c_str(), 1);
Le problème avec cette fonction c'est que wt ne prend pas toute la valeur mais seulement le premier caractère soit '0' pour "0654"
Du coup la conversion ne se fait pas et je ne connais pas les fonctions de conversion :oops:
Ah...
Je relis la question de départ et décidément, je me dis que je n'ai *RIEN* compris à la question.
Alors si j'ai compris cette fois, je me demande où est le problème ?
Tu dis avoir des valeurs en hexa qui correspondent à des caractères unicode. Ces valeurs sont dans des tableaux d'int dis tu.
Je prends une seule valeur pour simplifier.
Est-ce bien ça que tu as:
int nb = 0x0034;
Si oui, où est le problème ?
wchar_t wt = (wchar_t)nb;
Qu'est-ce qui ne va pas là ?
:oops:
Donc ça fonctionne
Concaténer un int en un wchar_t je dois avouer que ça ne m'étais même pas passé par la tête :oops:
En fait il n'y avait pas de problème
Dsl pour le dérangement
Pas concaténer. Caster ou transtyper, comme tu voudras.
Ne nous enduis pas encore d'erreur :!: :lol:
Ben tu sais, c'est arrivé à de nombreux autres de ne pas penser de suite à la solution simple :)
Tu as vu ce que j'ai moi même déliré quand j'ai lu ta question :oops: :lol:
:D
Ne sois pas désolé. Ca a été un plaisir.
Tu es le bienvenu sur ce forum, autant que tu voudras :)
Bon week end