strings literais Unicode em C # vs C ++ / CLI
-
22-07-2019 - |
Pergunta
C#:
char z = '\u201D';
int i = (int)z;
C++/CLI:
wchar_t z = '\u201D';
int i = (int)z;
Em C # "i
" torna-se, assim como espero, 8221 ($ 201D). Em C ++ / CLI, por outro lado, torna-se 65428 ($ FF94). Pode alguma alma caridosa explicar isso para mim?
Editar : tamanho wchar_t
não pode ser de questão aqui, porque:
C++/CLI:
wchar_t z = (wchar_t)8221;
int i = (int)z;
Aqui também, i
se torna 8221, de modo wchar_t
é realmente até o jogo de realizar um número inteiro de 16-bit no meu sistema. Ekeforshus
Solução
Outras dicas
De acordo com a wikipedia :
"A largura da
wchar_t
é específico do compilador e pode ser tão pequena como 8 bits. Consequentemente, os programas que precisam ser portátil através de qualquer compilador C ou C ++ não deve usar wchar_t para armazenar texto Unicode. O tipo wchar_t é destinado a armazenar caracteres de largura definida pelo compilador, que podem ser caracteres Unicode em alguns compiladores ".
Você não deve fazer quaisquer suposições sobre como ele é implementado.