常見類型轉換
1.1、CString互轉int
(1)将字元轉換為int,可以使用atoi、_atoi64或atol。
(2)将int轉換為CString變量,可以使用CString的Format函數。如
CString s;
int i = 64;
s.Format(”%d”, i)
1.2、CString互轉char*
(1)将char * 轉換為CString
CString strtest;
char * charpoint;
charpoint=”give string a value”;
strtest=charpoint;//令指針指向CString資料
或strtest.format(”%s”, charpoint);
(2)将CString轉換為char *
CString strtest;
char charpoint =(LPSTR)(LPCTSTR) strtest;//不能直接轉換為非常量指針(LPTSTR-[const] char))
或char * charpoint;
charpoint=strtest.GetBuffer(strtest.GetLength());//得到指向緩沖區的非常量指針
if(p != NULL) *p = _T(’\0’);
s.ReleaseBuffer(); // 使用完及時釋放,以便使用其它CString成員函數
1.3、CString轉換 char[100]
(1)将char[100] 轉換為 CString
char a[100];
CString str(”a”);
(2)将CString 轉換為 char[100]
strncpy(a,(LPCTSTR)str,sizeof(a));//拷貝字元串,檢查空間是否足夠
或memcpy(a,str,str.GetLength());//記憶體指派函數
1.4、CString互轉string
(1)将CString轉換為string
string s(CString.GetBuffer());
或(LPCTSTR)CString.
(2)将String轉換為CString
CString.format(”%s”, string.c_str());
const char * c_str()const; //擷取等效的C字元串
生成一個以空終止的字元序列(CString),其内容與字元串對象相同,并将其作為指向字元數組的指針傳回,會自動附加一個終止的空字元。
const char * data()const; //擷取字元串資料
傳回指向與字元串内容相同的字元數組的指針,沒有附加任何終止的空字元。
c_str()字元串後有’\0’,而data()沒有。
2、注:以下字元串均指char 類型
atoi --将字元串轉換成整形,從數字或正負号開始轉換,一直到非數字為止
itoa --将整形轉換成字元串
atof --字元串轉換成浮點型
atol —字元串轉換成長整形
gcvt—浮點型轉換成字元串(四舍五入)
strtod—字元串轉換成浮點型
strtol—字元串轉換成長整形
strtoul–字元串轉換成無符号長整形
toascii—将整形轉換成合法的ASCII碼字元
_ttoi—可以将CString轉換成整形
_itot_s—将int轉換成char
3.1、string字元串轉int
(1)N = stringToNum(str);//需要#include
(2)在中實作的
int stoi (const string& str, size_t* idx = 0, int base = 10);//idx傳回第一個非數字的指針索引,base預設10進制
long stol、unsigned long stoul、long long stoll、unsigned long long stoull、float stof、double stod、long double stold
(3)stringstream//#include
string a = “123.32”;
double res;
stringstream ss;//進行流的輸入輸出操作
ss << a;
ss >> res;
3.2、int轉string字元串
(1)stringstream(多次使用需要使用clear()清除
int N = 10;
stringstream ss;//#include
string str;
ss << N;
ss >> str;
(2)string = std::to_string(N)方法
隻需包含頭檔案即可
3.3、char字元串轉string字元串
(1)char* p = “hello”;
string s§;
s = p;
(2)String類的valueOf()方法,将字元(char)數組轉換為字元串
char[] cc={‘a’,‘b’,‘c’};
ss=String.valueOf(cc);
這時ss=“abc”;
4.1、char字元串轉int
(1)char a[10] = {“255”};
int b;
sscanf(a,"%d",&b);
char a[10] = {“ff”};//十六進制
int b;
sscanf(a,"%x",&b);
char str[]=”123.321”;
double a;
sscanf(str,”%lf”,&a);
(2)另外也可以用atoi(),atol(),atof()
4.2、int轉char字元串
(1)使用sprintf:#include <stdio.h>
char c[100];
int k=255;
sprintf(c,"%d",k);//d是有符号10進制數,u是無符号10進制
double a=123.321;
sprintf(c,”%.3lf”,a);
sprintf(c,"%x",k);//轉換成16進制,如果大寫可以用X,8進制是o
//c包含"ff" c[0]=‘f’ c[1]=‘f’
(2)itoa貌似跟平台有關,不建議使用。
4.3、string字元串轉char字元串
(1)string str(“test”);
const char* p = str.data();//記得要加const或者強制類型轉換成(char*)
const char* p = str.c_str();
(2)char p[10];
std::size_t length = str.copy(p,5,0);//從第0個開始複制5個,傳回有效複制的數量,需要在p最後添加’\0’
char * cstr = new char [str.length()+1];
std::strcpy (cstr, str.c_str());
或者逐個複制
(3) String類的toCharArray()方法,将字元串轉為字元(char)數組
String ss=“abc”;
char[] cc;
cc=ss.toCharArray();
這時cc={‘a’,‘b’,‘c’};