现在的位置: 首页 > 综合 > 正文

int char* string float Cstring 几种常用转换

2013年08月12日 ⁄ 综合 ⁄ 共 2271字 ⁄ 字号 评论关闭

 

int to char*/char[]
方法:
int num=0;
char temp[64];
sprintf(temp, "%d",num);

int number = 123456;  
char string[25];
itoa(number, string, 10); //10 转换数字的基数(进制)10就是

说按照10进制转换数字。还可以是2,8,16等等你喜欢的进制类型

 

char* to string
方法:
char temp[64];
string str1(temp);
你的只能初始化或赋值,在不是初始化的地方最好还是用assign().
string &assign(const char *s);用c类型字符串s赋值


char temp[64];
string str1;
str1=temp;

 

int to string
用int to char*/char[]和char* to string结合。

string to char*
方法:
char c[20];  
string s="1234";
strcpy(c,s.c_str());
最好不用下面方法
string str;
char* temp;
temp=filename.c_str()
//c最后指向的内容是垃圾,因为s对象被析构,其内容被处理

 

 

string to int
方法:

string source = "1412";
int result = 0;

// 使用Convert.ToInt32(string value);
result = Convert.ToInt32(source);

// 使用Int32.Parse(string value);
result = Int32.Parse(source);

// 使用Int32.TryParse(string s, out int result);
Int32.TryParse(source, out result);
以上三者不同之处:

http://blog.csdn.net/clever_yang/archive/2009/03/20/400800

5.aspx

①Cstring to float
Cstring strtemp=”11.22”;
float m_drundistance=atof(StrTemp);  //把strtemp 转化为浮点型
错误提示:
.cpp(815): error C2664: 'atof' : cannot convert parameter 1 from 'CString' to 'const char *'
原因:double atof(const char *nptr);
解决分析: CString 转化成 char* 之一:使用CString对象的GetBuffer方法,于是乎m_drundistance = atof(StrTemp.GetBuffer(0));又出现错误:
cpp(815): error C2664: 'atof' : cannot convert parameter 1 from 'wchar_t *' to 'const char *'
说明以上方法行不通,因此使用
方法一、LPCTSTR强制转化(虽然建议不用)
m_drundistance  =  atof((char*)LPCTSTR(StrTemp));
测试成功,经过测试并无数据丢失。
方法二、使用USES_CONVERSION宏,不过这个宏不能使用在大的循环体和大的函数中,因为其分配的内存在函数结束的时候才能释放,所以存在堆栈溢出的问题。
USES_CONVERSION
m_drundistance  =  atof(T2A(StrTemp));
方法三、可先把cstring类型转换到 char* 然后再给atof。(这种方法可行性好)
  char Str[1024];  
cstring str2;
  WideCharToMultiByte(CP_ACP,0,str2,-1,Str,1024,NULL,NULL); 
  float ff = atof(Str);

 

②Cstring to int
//将ID由CString转换成int
  CString tempField1;
  int ruleID = _tstoi(tempField1);
//将ID由char 转换到int
  char tempField1[10];
  ruleID=atoi(tempField1);

③CString to char*
方法一、WideCharToMultiByte()函数
Cstring str2;
  char Str[1024];  
  WideCharToMultiByte(CP_ACP,0,str2,-1,Str,1024,NULL,NULL);
方法二、T2A()
  USES_CONVERSION
  Char * str= T2A(StrTemp);
 方法三、强制转换
  Char* str=(char*)LPCTSTR(StrTemp);

④char * 、int、 float等类型转换到cstring
此类转换就比较容易,可通过format或sprintf等格式转换下即可。
例:  int k=10;
  Cstring strtype;
  StrType.Format(_T("%d",ê?k));
  char* ch;
  CString str;
  ch=(LPSTR)(LPCTSTR)str;
  str="good!";
  sprintf(ch,"%s",(LPTSTR)(LPCTSTR)str);

 

4. 安全性
 CString > string > char*;
5. 灵活性
CString > string >char*;
6. 可移植性
 char* = string > CString;

 

抱歉!评论已关闭.