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

Foi útil?

Solução

Você quer:

wchar_t z = L'\x201D';

aqui . \ U é indefinido.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top