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

    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)

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

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

    2、使用sprintf

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

    3、使用stringstream

     int aa = 30;
     stringstream ss;
     ss<<aa; 
     string s1 = ss.str();
     cout<<s1<<endl; // 30
    
     string s2;
     ss>>s2;
     cout<<s2<<endl; // 30

    可以这样理解,stringstream可以吞下不同的类型,根据s2的类型,然后吐出不同的类型。

    4、使用boost库中的lexical_cast

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

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

    string转化为int

    1、使用strtol(string to long)

     string s = "17";
     char* end;
     int i = static_cast<int>(strtol(s.c_str(),&end,16));
     cout<<i<<endl; // 23
    
     i = static_cast<int>(strtol(s.c_str(),&end,10));
     cout<<i<<endl; // 17

    2、使用sscanf

     int i;
     sscanf("17","%D",&i);
     cout<<i<<endl; // 17
    
     sscanf("17","%X",&i);
     cout<<i<<endl; // 23
    
     sscanf("0X17","%X",&i);
     cout<<i<<endl; // 23

    3、使用stringstream

     string s = "17";
    
     stringstream ss;
     ss<<s;
    
     int i;
     ss>>i;
     cout<<i<<endl; // 17

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

    4、使用boost库中的lexical_cast

     string s = "17";
     int i = boost::lexical_cast<int>(s);
     cout<<i<<endl; // 17
  • 相关阅读:
    SuperMap房产测绘成果管理平台
    SuperMap产权登记管理平台
    Android adb shell am 的用法(1)
    由浅入深谈Perl中的排序
    Android 内存监测和分析工具
    Android 网络通信
    adb server is out of date. killing...
    引导页使用ViewPager遇到OutofMemoryError的解决方案
    adb logcat 详解
    How to send mail by java mail in Android uiautomator testing?
  • 原文地址:https://www.cnblogs.com/enjoy233/p/10408745.html
Copyright © 2011-2022 走看看