Literales de cadena Unicode en C # frente a C ++ / CLI
-
22-07-2019 - |
Pregunta
C#:
char z = '\u201D';
int i = (int)z;
C++/CLI:
wchar_t z = '\u201D';
int i = (int)z;
En C # " i
" se convierte, como esperaba, en 8221 ($ 201D). En C ++ / CLI, por otro lado, se convierte en 65428 ($ FF94). ¿Puede un alma amable explicarme esto?
EDITAR : El tamaño de wchar_t
no puede ser un problema aquí, porque:
C++/CLI:
wchar_t z = (wchar_t)8221;
int i = (int)z;
Aquí también, i
se convierte en 8221, por lo que wchar_t
depende del juego de mantener un entero de 16 bits en mi sistema. Ekeforshus
Solución
Otros consejos
Según wikipedia :
" El ancho de
wchar_t
es específico del compilador y puede ser tan pequeño como 8 bits. En consecuencia, los programas que necesitan ser portables en cualquier compilador de C o C ++ no deben usar wchar_t para almacenar texto Unicode. El tipo wchar_t está destinado a almacenar caracteres anchos definidos por el compilador, que pueden ser caracteres Unicode en algunos compiladores. & Quot;
No debe hacer suposiciones sobre cómo se implementa.