C++ atoi()与其他语言一起使用

C++ atoi()与其他语言一起使用,c++,visual-c++,mfc,internationalization,C++,Visual C++,Mfc,Internationalization,我正在从事一个国际化项目。除了0-9之外,其他语言(如阿拉伯语或汉语)是否对数字使用不同的表示法?如果是这样的话,是否有atoi()的版本可以解释这些其他表示 我应该补充一点,我主要关注解析来自用户的输入。如果用户键入其他表示形式,我希望确保我将其识别为一个数字,并相应地处理它。如果您关心国际字符,那么您需要确保使用“Unicode感知”功能,如_wtoi(..) 您还可以检查是否支持UNICODE以使其独立于类型(从): 在本例中,标准C 库函数wcstombs Unicode到ASCII。这

我正在从事一个国际化项目。除了0-9之外,其他语言(如阿拉伯语或汉语)是否对数字使用不同的表示法?如果是这样的话,是否有atoi()的版本可以解释这些其他表示


我应该补充一点,我主要关注解析来自用户的输入。如果用户键入其他表示形式,我希望确保我将其识别为一个数字,并相应地处理它。

如果您关心国际字符,那么您需要确保使用“Unicode感知”功能,如_wtoi(..)

您还可以检查是否支持UNICODE以使其独立于类型(从):

在本例中,标准C 库函数wcstombs Unicode到ASCII。这个例子依赖于 关于数字0到 9总是可以从 Unicode到ASCII,即使某些 周围的文字无法显示。环礁 函数在以下任意字符处停止 不是数字

您的应用程序可以使用国家 语言支持(NLS)LCMapString 用于处理包含以下内容的文本的函数 为以下部分提供的本机数字: 脚本使用Unicode

使用wcstombs功能时的注意事项 不正确的做法可能会损害环境 应用程序的安全性。制作 确保 8位字符的字符串位于 最小尺寸2*(字符长度+1), 其中char_length表示 Unicode字符串的长度。这 作出限制是因为 双字节字符集(DBCSs), 可以映射每个Unicode字符 到两个连续的8位字符。 如果缓冲区没有保存整个 字符串,则结果字符串不是 以null结尾,构成安全性 风险。有关 应用程序安全,请参阅安全 考虑:国际 特征


我可以使用
std::wistringstream
和locale生成这个整数

#include <sstream>
#include <locale>
using namespace std;

int main()
{
  locale mylocale("en-EN"); // Construct locale object with the user's default preferences
  wistringstream wss(L"1");  // your number string
  wss.imbue( mylocale );    // Imbue that locale
  int target_int = 0;
  wss >> target_int;
  return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
locale mylocale(“en”);//使用用户的默认首选项构造locale对象
wistringstream wss(L“1”);//您的数字字符串
灌输(mylocale);//灌输该区域设置
int target_int=0;
wss>>目标;
返回0;
}

和.

我认为VisualC++有一些内置宏,它为您做了大部分切换。1的标准解决方案,虽然它高度依赖于系统上可用的C语言环境。应该在链接上解释:使用<代码> WCARGYT < /COD>对您的系统是否有意义取决于您使用的是哪种编码;对于UTF-8,通常的
strtol()
/
atoi()
就可以了,但是如果您有多字节/常量大小的字符集,它们就不会了。
#include <sstream>
#include <locale>
using namespace std;

int main()
{
  locale mylocale("en-EN"); // Construct locale object with the user's default preferences
  wistringstream wss(L"1");  // your number string
  wss.imbue( mylocale );    // Imbue that locale
  int target_int = 0;
  wss >> target_int;
  return 0;
}