c++11 - 将 char16_t 转换为 long/integer,(相当于 atoi/atol

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

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

这样的功能不存在吗?

最佳答案

试试这个函数:(它不一定是最有效的解决方案,但如果你别无选择(即你必须有一个 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));
}

关于c++11 - 将 char16_t 转换为 long/integer,(相当于 atoi/atol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33221242/

相关文章:

amazon-web-services - Ansible:为新创建的实例分配一个弹性IP

angularjs - 如何使用 Firebase 和 AngularJS 创建评论线程?

session - 身份验证为匿名的用户已尝试访问拥有的 session

android - 将抽屉导航添加到现有的 Android 谷歌地图

maven - 在 Nexus 中部署后,POM.xml 中的变量没有被解析?

html - HTML LocalStorage 中的数据在其他窗口/选项卡中可用所需的时间

gstreamer - 使用 Gstreamer 编码/解码 VP8 或 VP9?

laravel - 如何在 Laravel 的容器中重新绑定(bind)?

iis - 如何在没有收到确认消息的情况下退出 IIS Express 工作进程?

jboss - Keycloak 自定义验证输出消息