it编程 > 编程语言 > C/C++

深入解析 C++中std::stoul 函数

26人参与 2025-04-21 C/C++

std::stoul(string to unsigned long)是 c++ 标准库中的一个字符串转换函数,它用于将 std::string 或 std::wstring 转换为 unsigned long 类型的整数,并支持不同进制的转换(如二进制、十进制、十六进制等)。

1. std::stoul 的基本介绍

std::stoul 定义在 <string> 头文件中,并位于 std 命名空间下。它的主要功能是将字符串转换为 unsigned long 类型的整数,并且支持不同进制的转换

1.1 std::stoul 的函数原型

unsigned long stoul(const std::string& str, size_t* pos = nullptr, int base = 10);
unsigned long stoul(const std::wstring& str, size_t* pos = nullptr, int base = 10);

1.2 参数解析

1.3 返回值

2. std::stoul 的实现原理

在 gcc 标准库的 <string> 头文件中,std::stoul 的底层实现基于 std::strtoul,如下:

inline unsigned long
stoul(const string&amp; __str, size_t* __idx = 0, int __base = 10)
{
    return __gnu_cxx::__stoa(&amp;std::strtoul, "stoul", __str.c_str(),
                             __idx, __base);
}

2.1 解析实现代码

3. std::stoul 的实际用法

3.1 基础示例

#include <iostream>
#include <string>

int main() {
    std::string str = "123456789";
    unsigned long num = std::stoul(str);  // 默认10进制
    std::cout << "转换结果: " << num << std::endl;
    return 0;
}

输出:

转换结果: 123456789

3.2 使用 pos 参数记录转换结束的位置

#include <iostream>
#include <string>

int main() {
    std::string str = "12345xyz";
    std::size_t pos;
    unsigned long num = std::stoul(str, &pos);
    
    std::cout << "转换结果: " << num << std::endl;
    std::cout << "转换结束位置: " << pos << std::endl;
    
    return 0;
}

输出:

转换结果: 12345
转换结束位置: 5

解析:

3.3 处理不同进制的转换

#include <iostream>
#include <string>

int main() {
    std::string str = "1a";  // 16进制
    unsigned long num = std::stoul(str, nullptr, 16);  // 以16进制解析
    std::cout << "转换结果: " << num << std::endl;
    
    return 0;
}

输出:

转换结果: 26

解析:

其他进制示例

std::stoul("1010", nullptr, 2);  // 以二进制解析,返回 10
std::stoul("75", nullptr, 8);    // 以八进制解析,返回 61
std::stoul("1f", nullptr, 16);   // 以十六进制解析,返回 31

4. 处理异常情况

4.1 输入不是有效的数字

如果 str 不是有效的整数格式,std::stoul 会抛出 std::invalid_argument 异常:

#include <iostream>
#include <string>
#include <stdexcept>

int main() {
    try {
        std::string str = "abc";  
        unsigned long num = std::stoul(str);
        std::cout << "转换结果: " << num << std::endl;
    } catch (const std::invalid_argument& e) {
        std::cerr << "错误: 无效的数字字符串 -> " << e.what() << std::endl;
    }

    return 0;
}

输出:

错误: 无效的数字字符串 -> stoul

4.2 数值超出 unsigned long 范围

如果字符串表示的数值超出 unsigned long 的范围,std::stoul 会抛出 std::out_of_range 异常:

#include <iostream>
#include <string>
#include <climits>

int main() {
    try {
        std::string str = "99999999999999999999";  
        unsigned long num = std::stoul(str);
        std::cout << "转换结果: " << num << std::endl;
    } catch (const std::out_of_range& e) {
        std::cerr << "错误: 数值超出范围 -> " << e.what() << std::endl;
    }

    return 0;
}

输出:

错误: 数值超出范围 -> stoul

5. std::stoul 相关函数

函数作用返回类型
std::stoi转换为 intint
std::stol转换为 longlong
std::stoll转换为 long longlong long
std::stoul转换为 unsigned longunsigned long
std::stoull转换为 unsigned long longunsigned long long

6. 结论

到此这篇关于深入解析 c++中std::stoul 函数的文章就介绍到这了,更多相关c++ std::stoul 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

C++ 中类(class)和结构体(struct)的区别

04-21

PyQt5中QLCDNumber的实现

04-21

Token安全存储的几种方式小结

04-18

C++使用printf语句实现进制转换的示例代码

04-18

QT进行CSV文件初始化与读写操作

04-18

Qt中QScrollArea控件的实现

04-18

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论