C++中数字与字符串之间的转换(包括C++11新标准和宽窄字符转换)

C++中数字与字符串之间的转换

1、字符串数字之间的转换

(1)string --> char *
   string str("OK");
   char * p = str.c_str();

(2)char * -->string
   char *p = "OK";
   string str(p);

(3)char * -->CString 
   char *p ="OK";
   CString m_Str(p);
   //或者
   CString m_Str;
   m_Str.Format("%s",p);

(4)CString --> char *
   CString str("OK");
   char * p = str.GetBuffer(0);
   ...
   str.ReleaseBuffer();

(5)string --> CString  
   CString.Format("%s", string.c_str());  

(6)CString --> string
   string s(CString.GetBuffer(0));  
   GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间,CString对象不能动态增长了。

(7)double/float->CString
   double data;
   CString.Format("%.2f",data); //保留2位小数

(8)CString->double
   CString s="123.12";
   double   d=atof(s);   
 
(9)string->double
  double d=atof(s.c_str());

2、数字转字符串:使用sprintf()函数

char str[10];
int a=1234321;
sprintf(str,"%d",a);
--------------------
char str[10];
double a=123.321;
sprintf(str,"%.3lf",a);
--------------------
char str[10];
int a=175;
sprintf(str,"%x",a);//10进制转换成16进制,如果输出大写的字母是sprintf(str,"%X",a)
--------------------
char *itoa(int value, char* string, int radix); 
同样也可以将数字转字符串,不过itoa()这个函数是平台相关的(不是标准里的),故在这里不推荐使用这个函数。

3、字符串转数字:使用sscanf()函数

char str[]="1234321";
int a;
sscanf(str,"%d",&a);
.............
char str[]="123.321";
double a;
sscanf(str,"%lf",&a);
.............
char str[]="AF";
int a;
sscanf(str,"%x",&a); //16进制转换成10进制

另外也可以使用atoi(),atol(),atof().

4、使用stringstream类

用ostringstream对象写一个字符串,类似于sprintf() 
  ostringstream s1;
  int i = 22;
  s1 << "Hello " << i << endl;
  string s2 = s1.str();
  cout << s2;

用istringstream对象读一个字符串,类似于sscanf() 
  istringstream stream1;
  string string1 = "25";
  stream1.str(string1);
  int i;
  stream1 >> i;
  cout << i << endl;  // displays 25

5、C++11新标准和宽窄字符转换

c++11 数值类型和字符串的相互转换

string和数值类型转换

    c++11提供了to_string方法,可以方便的将各种数值类型转换为 字符串类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
std:: string  to_string( int  value);
std:: string  to_string( long  int  value);
std:: string  to_string( long  long  int  value);
std:: string  to_string(unsigned  int  value);
std:: string  to_string(unsigned  long  long  int  value);
std:: string  to_string( float  value);
std:: string  to_string( double  value);
std::wstring to_wstring( int  value);
std::wstring to_wstring( long  int  value);
std::wstring to_wstring( long  long  int  value);
std::wstring to_wstring(unsigned  int  value);
std::wstring to_wstring(unsigned  long  long  int  value);
std::wstring to_wstring( float  value);
std::wstring to_wstring( double  value);

 

    还提供了stoxxx方法,将string转换为各种类型的数据:

1
2
3
4
std:: string  str =  "1000" ;
int  val = std::stoi(str);
long  val = std::stol(str);
float  val = std::stof(str);

 

    c++11还提供了字符串(char*)转换为整数和浮点类型的方法:

1
2
3
4
atoi: 将字符串转换为  int
atol: 将字符串转换为 long
atoll:将字符串转换为  long  long
atof: 将字符串转换为浮点数

 

宽窄字符转换

    c++11增加了unicode字面量的支持,可以通过L来定义宽字符 
std::wstring wide_str = L"中国人"; //定义了宽字符字符串 
    将宽字符转换为窄字符需要用到condecvt库中的std::wstring_convert。 
    std::wstring_convert使std::string和std::wstring之间的相互转换变得很方便,如代码:

1
2
3
4
5
6
7
8
9
10
std::wstring wide_str = L "中国人" ;
std::wstring_convert char , std::mbstate_t>>
converter( new  std::codecvt char , std::mbstate_t>( "CHS" ));
std:: string  narrow_str = converter.to_bytes(wide_str);
std::wstring wstr = converter.from_bytes(narrow_str);
std::cout << narrow_str << std::endl;
wcout.imbue(std::locale( "chs" ));
std::wcout << wstr << std::endl;
std::cout << wstr.size() <<  " "  << wstr.length() << endl;
std::cout << narrow_str.size() <<  " "  << narrow_str.length() << endl;

 


你可能感兴趣的:(C++)