跨平台_wtoi()实现?

时间:2011-05-26 22:12:44

标签: c++ visual-c++ unicode cross-platform g++

嘿大家,我正在编写一个软件,由于我选择使用Qt,要求我重写几百行代码以符合unicode(qt强制我的整个项目_UNICODE)。几乎杀了自己编写所有这些代码并使其工作后我遇到了_wtoi()的问题 - 它不是跨平台的!

任何人都可以帮我快速实施吗?我听说过使用stringstreams并保持跨平台但我以前从未使用过它们并且使用它作为unicode atoi()似乎暗示了我。我更倾向于有人向我解释它,而不是仅仅通过stringstreams示例从现成的网站和论坛中复制代码。

谢谢!!

2 个答案:

答案 0 :(得分:3)

试试这个:

inline int wtoi(const wchar_t *str)
{
  return (int)wcstol(str, 0, 10);
}

答案 1 :(得分:1)

如果您想要纯粹的运行时速度,我建议BoostSpiritQi

#include <cwchar>
#include <boost/spirit/include/qi_int.hpp>
#include <boost/spirit/include/qi_parse.hpp>

int portable_wtoi(wchar_t const* const str)
{
    using boost::spirit::int_;
    using boost::spirit::qi::parse;

    wchar_t const* p = str;
    int i;
    return parse(p, str + std::wcslen(str), int_, i) && p != str ? i : 0;
}

但请注意,您可能会注意到编译时间增加(建议使用预编译头文件)。