2011-05-26 126 views
1

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

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

谢谢!

+4

为什么不使用wcstol()? – 2011-05-27 00:20:31

+0

我听说它不像其他解决方案那样安全。然而,我可能是错的。 – 2011-05-27 00:27:48

+1

你是。它实际上可以让你检查是否有一个数字,_wtoi()只返回0。 – 2011-05-27 00:35:02

回答

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; 
} 

但是请注意,你可能会注意到增加编译时间(使用预编译头推荐)。

2

试试这个:

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