Bonjour,

Sur mon projet MFC (VS2005), je manipule des chaines de caractères de type TCHAR. Donc, suivant l'option de compilation, c'est soit du SBCS, du MBCS ou de l'UNICODE. Bien que je n'envisage de faire la compilation qu'en UNICODE, mon application est compatible avec ces trois codages.

J'utilise des fonctions qui n'acceptent que de l'UNICODE en paramètre (des fonctions GDI+ pour être précis), donc je fais une conversion à la volée (en utilisant un CStringW par exemple)

Sur certaines fonctions, j'ai besoin de manipuler des index sur les caractères d'une chaine. Et comme il y a une conversion qui est effectuée vers l'UNICODE, si je suis en SBCS ou en MBCS, ces index ne sont plus valables.

J'ai donc besoin de 'mapper' ces index, dans un sens, puis dans l'autre, de la conversion.

Est ce qu'on peut dire :

- un caractère SBCS (un CHAR) = 1 WCHAR uniquement
- un caractère MBCS (un ou deux CHAR, puisque la CRT ne gère que le DBCS) = 1 WCHAR uniquement

dans ce cas là, faire correspondre les index est assez trivial, puisque c'est le nombre de caractères.

mais comme la fonction MultiByteToWideChar, et sa réciproque WideCharToMultiByte, sont UTF-16 et non UCS-2, j'ai des doutes ...

bien que la fonction wctomb de la CRT me fait penser qu'il y a uniquement 1 WCHAR pour un caractère MBCS, car voici sa signature:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
int wctomb(
   char *mbchar,
   wchar_t wchar 
);
idem pour la réciproque mbtowc, qui ne fournit qu'un WCHAR

Est-ce que mon raisonnement est valide ?

Merci d'avance

@+