zoukankan      html  css  js  c++  java
  • C++ int与string的互转

    int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)---前缀加0,16进制(hex)---前缀加0x或者0X。

    string前后加上双引号,告诉编译器把它当成一串字符来解释。

    注意:对于字符,需要区分字符和字符表示的数值。比如:char a = 8;char b = '8',a表示第8个字符,b表示字符8,是第56个字符。


     int转化为string

    1、使用itoa(int to string)

    复制代码
     1  //char *itoa( int value, char *string,int radix);
     2  // 原型说明:
     3  // value:欲转换的数据。
     4  // string:目标字符串的地址。
     5  // radix:转换后的进制数,可以是10进制、16进制等。
     6  // 返回指向string这个字符串的指针
     7 
     8  int aa = 30;
     9  char c[8];
    10  itoa(aa,c,16);
    11  cout<<c<<endl; // 1e
    复制代码

    注意:itoa并不是一个标准的C函数,它是Windows特有的,如果要写跨平台的程序,请用sprintf。

    2、使用sprintf

    复制代码
     1  // int sprintf( char *buffer, const char *format, [ argument] … );
     2  //参数列表
     3  // buffer:char型指针,指向将要写入的字符串的缓冲区。
     4  // format:格式化字符串。
     5  // [argument]...:可选参数,可以是任何类型的数据。
     6  // 返回值:字符串长度(strlen)
     7 
     8  int aa = 30;
     9  char c[8]; 
    10  int length = sprintf(c, "%05X", aa); 
    11  cout<<c<<endl; // 0001E
    复制代码

    3、使用stringstream

    复制代码
    1  int aa = 30;
    2  stringstream ss;
    3  ss<<aa; 
    4  string s1 = ss.str();
    5  cout<<s1<<endl; // 30
    6 
    7  string s2;
    8  ss>>s2;
    9  cout<<s2<<endl; // 30
    复制代码

    可以这样理解,stringstream可以吞下不同的类型,根据s2的类型,然后吐出不同的类型。
    4、使用boost库中的lexical_cast

    1  int aa = 30;
    2  string s = boost::lexical_cast<string>(aa);
    3  cout<<s<<endl; // 30

    3和4只能转化为10进制的字符串,不能转化为其它进制的字符串。

    5 c++11新增  to_string

    函数原型:
    string to_string (int val);
    string to_string (long val);
    string to_string (long long val);
    string to_string (unsigned val);
    string to_string (unsigned long val);
    string to_string (unsigned long long val);
    string to_string (float val);
    string to_string (double val);
    string to_string (long double val);

    功能:

    将数值转化为字符串。返回对应的字符串。

    例子:

    复制代码
    #include <iostream>   
    #include <string>     
    using namespace std;
    
    int main()
    {
        string pi = "pi is " + std::to_string(3.1415926);
        string perfect = to_string(1 + 2 + 4 + 7 + 14) + " is a perfect number";
        cout << pi << '
    ';
        cout << perfect << '
    ';
        system("pause");
        return 0;
    }
    复制代码

     string转化为int
    1、使用strtol(string to long) 

    复制代码
    1 string s = "17";
    2  char* end;
    3  int i = static_cast<int>(strtol(s.c_str(),&end,16));
    4  cout<<i<<endl; // 23
    5 
    6  i = static_cast<int>(strtol(s.c_str(),&end,10));
    7  cout<<i<<endl; // 17
    复制代码

    2、使用sscanf

    复制代码
    1 int i;
    2  sscanf("17","%D",&i);
    3  cout<<i<<endl; // 17
    4 
    5  sscanf("17","%X",&i);
    6  cout<<i<<endl; // 23
    7 
    8  sscanf("0X17","%X",&i);
    9  cout<<i<<endl; // 23
    复制代码

    3、使用stringstream

    复制代码
    1  string s = "17";
    2 
    3  stringstream ss;
    4  ss<<s;
    5 
    6  int i;
    7  ss>>i;
    8  cout<<i<<endl; // 17
    复制代码

    注:stringstream可以吞下任何类型,根据实际需要吐出不同的类型。

    4、c++11 使用stoi()


    5、使用boost库中的lexical_cast

    1  string s = "17";
    2  int i = boost::lexical_cast<int>(s);
    3  cout<<i<<endl; // 17
  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/dingz/p/10910552.html
Copyright © 2011-2022 走看看