Строковые литералы Unicode в C # против C ++ / CLI - PullRequest
1 голос
/ 01 декабря 2009
C#:
char z = '\u201D';
int i = (int)z;

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

В C # "i" становится, как я и ожидал, 8221 ($ 201D). В C ++ / CLI, с другой стороны, он становится 65428 ($ FF94). Может ли какая-то добрая душа объяснить это мне?

РЕДАКТИРОВАТЬ : Размер wchar_t здесь не может быть проблемой, потому что:

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

Здесь также i становится 8221, поэтому wchar_t действительно подходит для игры в 16-битное целое число в моей системе. Ekeforshus

Ответы [ 2 ]

4 голосов
/ 01 декабря 2009

Вы хотите:

wchar_t z = L'\x201D';

из здесь . \ u не определено.

0 голосов
/ 01 декабря 2009

Согласно Википедии :

"Ширина wchar_t зависит от компилятора и может составлять всего 8 бит. Следовательно, программы, которые должны быть переносимы на любой компилятор C или C ++, не должны использовать wchar_t для хранения текста Unicode. Тип wchar_t: предназначен для хранения широких символов, определенных компилятором, которые могут быть символами Unicode в некоторых компиляторах. "

Вы не должны делать никаких предположений о том, как это реализовано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...