Littéraux de chaîne Unicode en C # vs C ++ / CLI
-
22-07-2019 - |
Question
C#:
char z = '\u201D';
int i = (int)z;
C++/CLI:
wchar_t z = '\u201D';
int i = (int)z;
En C # " i
" devient, comme je l’espère, 8221 (201 D). En C ++ / CLI, par contre, il devient 65428 ($ FF94). Une bonne âme peut-elle m'expliquer cela?
EDIT : la taille de wchar_t
ne peut pas être en cause ici, car:
C++/CLI:
wchar_t z = (wchar_t)8221;
int i = (int)z;
Ici aussi, i
devient 8221, de sorte que wchar_t
est effectivement prêt à contenir un entier de 16 bits sur mon système. Ekeforshus
La solution
Autres conseils
Selon wikipedia :
" La largeur de
wchar_t
est spécifique au compilateur et peut être aussi petite que 8 bits. Par conséquent, les programmes devant être portables sur un compilateur C ou C ++ ne doivent pas utiliser wchar_t pour stocker du texte Unicode. Le type wchar_t est destiné à stocker les caractères larges définis par le compilateur, qui peuvent être des caractères Unicode dans certains compilateurs. "
Vous ne devriez pas émettre d'hypothèses sur la façon dont cela est mis en œuvre.