Если вас беспокоят международные символы, вам необходимо убедиться, что вы используете функцию с поддержкой Unicode, например _wtoi (..).
Вы также можете проверить, поддерживается ли UNICODE, чтобы сделать его независимым от типа (от MSDN ):
TCHAR tstr[4] = TEXT("137");
#ifdef UNICODE
size_t cCharsConverted;
CHAR strTmp[SIZE]; // SIZE equals (2*(sizeof(tstr)+1)). This ensures enough
// room for the multibyte characters if they are two
// bytes long and a terminating null character. See Security
// Alert below.
wcstombs_s(&cCharsConverted, strTmp, sizeof(strTmp), (const wchar_t *)tstr, sizeof(strTmp));
num = atoi(strTmp);
#else
int num = atoi(tstr);
#endif
В этом примере стандарт C
функция библиотеки переводит wcstombs
Юникод в ASCII. Пример полагается
на то что цифры от 0 до
9 всегда можно перевести с
Unicode для ASCII, даже если некоторые из
окружающий текст не может. Атои
Функция останавливается на любом символе, который
не цифра.
Ваше приложение может использовать Национальный
Поддержка языков (NLS) LCMapString
функция для обработки текста, который включает в себя
родные цифры предоставлены для некоторых
скрипты в Юникоде.
Внимание! Использование функции wcstombs
неправильно может поставить под угрозу
безопасность вашего приложения. Делать
уверен, что буфер приложения для
строка из 8-битных символов находится на
наименьший размер 2 * (char_length +1),
где char_length представляет
длина строки Unicode. это
ограничение сделано потому, что с
двухбайтовые наборы символов (DBCS),
каждый символ Unicode может быть сопоставлен
до двух последовательных 8-битных символов.
Если буфер не содержит весь
строка, строка результата не
терминирует, создает безопасность
риск. Для получения дополнительной информации о
безопасность приложения, см. Безопасность
Соображения: Международный
Особенности.