天天看點

C++字元串轉換

常見類型轉換

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’};

繼續閱讀