2009-12-01 5 views
1
C#: 
char z = '\u201D'; 
int i = (int)z; 

C++/CLI: 
wchar_t z = '\u201D'; 
int i = (int)z; 

En C# "i" devient, comme je le suppose, 8221 ($ 201D). En C++/CLI, il devient 65428 ($ FF94). Une âme aimable peut-elle m'expliquer cela?Les littéraux de chaîne Unicode en C# vs C++/CLI

EDIT: Taille de wchar_t ne peut pas être de problème ici, parce que:

C++/CLI: 
wchar_t z = (wchar_t)8221; 
int i = (int)z; 

Ici aussi, i devient 8221, donc wchar_t est en effet jusqu'au jeu de tenir un entier sur 16 bits mon système. Ekeforshus

+0

Votre deuxième exemple ne prouve pas que la taille n'est pas un problème -> z dans le deuxième exemple == z dans le premier exemple? –

Répondre

4

Vous voulez:

wchar_t z = L'\x201D'; 

de here. \ u est indéfini.

+1

... et aurait dû vous donner l'avertissement a/W1 "séquence d'échappement de caractères non reconnue". – MSalters

0

Selon wikipedia.

« La largeur de wchar_t est compilateur spécifique et peut être aussi faible que 8 bits Par conséquent, les programmes qui doivent être portables à travers tout C ou C++ compilateur ne doit pas utiliser wchar_t pour stocker du texte Unicode Le type wchar_t est destiné à stocker des caractères larges définis par le compilateur, qui peuvent être des caractères Unicode dans certains compilateurs. "

Vous ne devez faire aucune hypothèse sur la façon dont il est implémenté.

Questions connexes