📜  字符串转十进制 c++ strtol - C++ (1)

📅  最后修改于: 2023-12-03 15:39:02.888000             🧑  作者: Mango

字符串转十进制 - C++

字符串转十进制是指将一个字符串表示的数字转换为十进制数值。C++中可以使用strtol函数实现。

函数原型
long int strtol (const char* str, char** endptr, int base);

其中参数含义如下:

  • str: 要转换为长整型数的字符串。
  • endptr: 指向一个指针,用于存储转换后未转换的字符串部分的首地址,也可设置为NULL表示不需要该值。
  • base: 要用于转换的进制数,可以是2~36之间的任何一个整数,或者0。如果是0,则strtol会根据字符串的首字符来判断要用哪种进制,如0x开头的字符串会被认为是16进制数。

返回值为转换后的长整型数值。

例子

下面的代码演示了如何将一个字符串表示的整数转换为十进制数值:

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    const char* str = "123456";
    char* endptr;
    long int num;

    num = strtol(str, &endptr, 10);

    cout << "String: " << str << endl;
    cout << "Number: " << num << endl;
    cout << "End pointer: " << endptr << endl;

    return 0;
}

运行结果为:

String: 123456
Number: 123456
End pointer: 
注意事项

在使用strtol函数时,需要注意以下几点:

  • 被转换的字符串必须以数字字符开头,否则转换失败。
  • 如果转换失败,返回值为0,但是无法判断是因为字符串本身就是0还是转换失败。通常建议在调用strtol函数之前,先检查字符串是否符合转换的条件。
  • 当字符串表示的数值过大或过小,超出了长整型数值的范围时,函数会返回LONG_MAXLONG_MIN,并设置errno的值为ERANGE
  • base为0时,strtol会自动根据字符串开头的特定字符来判断要使用哪种进制。但是如果字符串开头既没有0也没有其他特定字符,strtol会当作十进制数来处理。如果要转换的字符串本身不是十进制数,建议明确指定base的值。