Кроссплатформенная реализация _wtoi ()? - PullRequest
1 голос
/ 27 мая 2011

Привет всем, я пишу программный продукт, который, из-за моего выбора использовать Qt, потребовал, чтобы я переписал несколько сотен строк кода для совместимости с юникодом (qt заставил весь мой проект _UNICODE). После того, как я чуть не убил себя, написав весь этот код и заставив его работать, я столкнулся с проблемой с _wtoi () - это не кроссплатформенность!

Может кто-нибудь помочь мне с быстрой реализацией? Я слышал об использовании струнных потоков, чтобы сделать это и оставаться кроссплатформенным, но мне никогда не приходилось использовать их раньше, и использование его в качестве unicode atoi (), похоже, намекает на меня. Я бы предпочел, чтобы кто-то объяснил мне это, а не просто копировал код с легкодоступных веб-сайтов и форумов с примерами потоковой передачи.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 10 ноября 2013

попробуйте это:

inline int wtoi(const wchar_t *str)
{
  return (int)wcstol(str, 0, 10);
}
1 голос
/ 27 мая 2011

Если вы хотите просто время выполнения скорость, я рекомендую Повышение . Дух . Ци :

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

Обратите внимание, однако, что вы можете заметить увеличение времени компиляции (рекомендуется использовать предварительно скомпилированные заголовки).

...