编程/C++

type转变
Edited: Tuesday 1 July 2025

C++ type转变

string, char*, const char*, int type conversion 转变为 int/float/double

老办法。

1//older version
2atoi( str.c_str() )

C++ 11标准库方法。

1// string -> integer
2int i = std::stoi(s);
3
4// string -> float
5float f = std::stof(s);
6
7// string -> double
8double d = std::stod(s);

借助istringstream。

1#include <sstream>
2// string -> integer
3std::istringstream ( str ) >> i;
4
5// string -> float
6std::istringstream ( str ) >> f;
7
8// string -> double
9std::istringstream ( str ) >> d;

Boost’s lexical_cast

 1// Boost's lexical_cast
 2#include <boost/lexical_cast.hpp>
 3#include <string>
 4
 5std::string str;
 6
 7try {
 8    int i = boost::lexical_cast<int>( str.c_str());
 9    float f = boost::lexical_cast<int>( str.c_str());
10    double d = boost::lexical_cast<int>( str.c_str());
11    } catch( boost::bad_lexical_cast const&amp;amp;amp; ) {
12        // Error management
13}

stringto char* 转变为 const char*

 1char* strtoch(string str){
 2    char *cstr = new char[str.length() + 1];
 3    strcpy(cstr, str.c_str());
 4    return cstr;
 5}
 6//------------------------------------------//
 7std::string x = "hello world";
 8const char* p_c_str = x.c_str();
 9const char* p_data = x.data();
10
11char* p_writable_data = x.data(); // for non-const x from C++17
12char* p_x0_rw = &x[0];  // compiles if x is not const...
13
14//------------------------------------------//
15std::vector<char> cstr(str.c_str(), str.c_str() + str.size() + 1);
16// or
17std::string str;
18std::vector<char> writable(str.begin(), str.end());
19writable.push_back('\0');

char* to int

1#include <stdlib.h>
2
3int atoi(const char *nptr);
4long atol(const char *nptr);
5long long atoll(const char *nptr);
6long long atoq(const char *nptr);

char to int

 1// read the value as an ascii code
 2char a = 'a';
 3// to
 4int ia = (int)a;
 5// or
 6int ia = a;
 7// or
 8int num = static_cast<int>(letter); // if letter='a', num=97
 9//------------------------------------------//
10//convert the character '0' -> 0, '1' -> 1, etc
11char a = '4';
12int ia = a - '0'; // a - '0' is equivalent to ((int)a) - ((int)'0')

int to char

1int i = 49;
2char c = i; // c='1' 49=1
3char c = (char)i; // c='1' 49=1
4char c = '0'+i; // c='a' 48+49=97=a

int to char*/cstring

1int i = 49;
2char buffer[33];
3char *c = itoa(i,buffer,10);

int to string#

 1#include <string>
 2
 3int i = 49;
 4
 5std::string s = std::to_string(i);
 6
 7// or
 8auto s = std::to_string(i);
 9
10// or
11char *intStr = itoa(i);
12string str = string(intStr);
13
14// or
15
16#include <sstream>
17
18stringstream ss;
19ss << a;
20string str = ss.str();
21
22// or
23
24#include <sstream>
25
26template <typename T>
27std::string NumberToString ( T Number )
28{
29   std::ostringstream ss;
30   ss << Number;
31   return ss.str();
32}
33// or
34#include <boost/lexical_cast.hpp>
35int num = 4;
36std::string str = boost::lexical_cast<std::string>(num);