Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将wchar_t*转换为长c++; >标题说明我需要知道在VisualC++中把 WCARTH*T*转换为长< /C> >的最佳方法。有可能吗?如果可能的话,怎么做?_C++_Windows_Winapi_Visual C++_Wchar T - Fatal编程技术网

如何将wchar_t*转换为长c++; >标题说明我需要知道在VisualC++中把 WCARTH*T*转换为长< /C> >的最佳方法。有可能吗?如果可能的话,怎么做?

如何将wchar_t*转换为长c++; >标题说明我需要知道在VisualC++中把 WCARTH*T*转换为长< /C> >的最佳方法。有可能吗?如果可能的话,怎么做?,c++,windows,winapi,visual-c++,wchar-t,C++,Windows,Winapi,Visual C++,Wchar T,用于将宽字符串转换为长字符串 wchar_t *str = L"123"; long lng = _wtol(str); 使用 #包括 #包括 int main() { 常数wchar_t*s1=L“124”; long num=boost::词法转换(s1); std::cout“cover”是什么意思?请退出您的问题,以包含示例输入和输出?您自己尝试了什么?您的问题不清楚。起初我认为您希望将wchar\t指针转换为long,这是不“可能”的在64位窗口中,只有在读取了答案后,我才知道要将存

用于将宽字符串转换为长字符串

wchar_t *str = L"123";
long lng = _wtol(str);
使用

#包括
#包括
int main()
{
常数wchar_t*s1=L“124”;
long num=boost::词法转换(s1);

std::cout“cover”是什么意思?请退出您的问题,以包含示例输入和输出?您自己尝试了什么?您的问题不清楚。起初我认为您希望将
wchar\t
指针转换为
long
,这是不“可能”的在64位窗口中,只有在读取了答案后,我才知道要将存储在 WHARGYT*> /CODE >中的字符串转换成<代码>长 <代码> -WToL?真的吗?C++中的最佳方式是C++函数还是MS特定函数?为什么链接到CE文档?错误是如何处理的?是不是T的情况?hat
\u wtol(L“foo”)==\u wtol(L“0”)
?如果您有更好的方法,可以在此处提及。:)这是一个相当弱的响应缺少错误报告是一个需要详细说明的限制。如果应用程序不需要在此处报告错误,那么这可能是一个可行的解决方案。对于所有其他情况,这是一个更好的解决方案,并且应该是公认的答案。@IInspec表我不会说我的答案一定比它好,因为
\wtol
似乎运行得快得多。我机器上的快速配置文件显示,它的运行时间约为40ns,而其他方法的运行时间约为100ns。需要C++11。基于s的解决方案也可以用于C++11之前的版本。这也可以用于报告错误。@IInspectable您可以实现我认为他们是最后一招,考虑到他们如何。成绩可能不是每个人的首要目标,而且“惊人的缓慢”。可能仍然足够快。依赖boost可能在所有场景中都不可行,而且C++11可能不可用。因为这是关于普遍适用性的,所以提供选项和理由通常是一个好主意。
#include <iostream>
#include <boost/lexical_cast.hpp>

int main()
{
    const wchar_t* s1 = L"124";
    long num = boost::lexical_cast<long>(s1);
    std::cout << num;
    try
    {
        const wchar_t* s2 = L"not a number";
        long num2 = boost::lexical_cast<long>(s2);
        std::cout << num2 << "\n";
    }
    catch (const boost::bad_lexical_cast& e)
    {
        std::cout << e.what();
    }
}
#include <iostream>
#include <string>

int main()
{
    const wchar_t* s1 = L"45";
    const wchar_t* s2 = L"not a long";

    long long1 = std::stol(s1);
    std::cout << long1 << "\n";
    try
    {
        long long2 = std::stol(s2);
        std::cout << long2;
    }
    catch(const std::invalid_argument& e)
    {
        std::cout << e.what();
    }    
}
#include <iostream>
#include <cwchar>

int main()
{
    const wchar_t* s1  = L"123";
    wchar_t *end;
    long long1 = std::wcstol(s1, &end, 10);
    if (s1 != end && errno != ERANGE)
    {
        std::cout << long1;
    }
    else
    {
        std::cout << "Error";
    }
    const wchar_t* s2  = L"not a number";
    long long2 = std::wcstol(s2, &end, 10);
    if (s2 != end && errno != ERANGE)
    {
        std::cout << long2;
    }
    else
    {
        std::cout << "Error";
    }
}