将char16_t转换为long / integer,(atoi / atol等效)

时间:2015-10-19 18:19:24

标签: c++11

我想将char16_t转换为整数和/或长整数。

const char16_t* t = u"12";
long lt = atol( t);

这样的功能不存在吗?

1 个答案:

答案 0 :(得分:2)

尝试此功能:(它不一定是最有效的解决方案,但如果您别无选择(即必须输入char16_t*,它就能完成工作您确定char16_t*字符串中确实有一个有效的数字序列。

Run It Online

#include <codecvt>
#include <locale>
#include <string>

int char16_to_int(const char16_t* s16)
{
    // https://stackoverflow.com/a/7235204/865719
    std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
    std::string str = convert.to_bytes(s16);

    return std::stoi(str);
}

long char16_to_long(const char16_t* s16)
{
    // https://stackoverflow.com/a/7235204/865719
    std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
    std::string str = convert.to_bytes(s16);

    return std::stol(str);
}

编辑:我已经重构了解决方案,以减少重复:

Run It Online

#include <codecvt>
#include <locale>
#include <string>

std::string char16_to_string(const char16_t* s16)
{
    // https://stackoverflow.com/a/7235204/865719
    std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
    return convert.to_bytes(s16);
}

long char16_to_long(const char16_t* s16)
{
    return stol(char16_to_string(s16));
}

int char16_to_int(const char16_t* s16)
{
    return stoi(char16_to_string(s16));
}