常用数据类型转换CString do…
2017-10-13 14:21
393 查看
原文地址:常用数据类型转换CString double char int WCHAR(转)作者:xiaoyo02
view plaincopy
to clipboardprint?
WCHAR ch1[10]=”abc”;
CString ch2;
Ch2=ch1;
view plaincopy
to clipboardprint?
CString src =”abc”
WCHAR des [10];
lstrcpy(des,src);
view plaincopy
to clipboardprint?
Double des;
10d44
WCHAR src[10];
swscanf(src,_T("%lf"),&des);
view plaincopy
to clipboardprint?
CString des
double src
des.Format(_T("%lf"), src);
view plaincopy
to clipboardprint?
Double des;
WCHAR src[10];
swscanf(src,_T("%d"),&des);
view plaincopy
to clipboardprint?
CString des
double src
des.Format(_T("%d"), src);
view plaincopy
to clipboardprint?
WCHAR WBuffer[BufferLength];
memset(WBuffer, 0,BufferLength);
char * src =”abc”;
int nLen = strlen(src) +1;
int nwLen = MultiByteToWideChar(CP_ACP, 0, src,nLen, NULL, 0);
MultiByteToWideChar(CP_ACP, 0, src, nLen, WBuffer, nwLen); //change char * to PWCHAR
////-————————————————————
_T宏的作用就是转换成TCHAR
当支持UNICODE的时候,CString内的类型是wchar_t,当转换时必须考虑是wchar_t而不是char,所以相应的也要改变。
从CString转换为int
Cpp代码
从int转为CString,因为是wchar_t所以直接用CString::Format()时会出现无法从wchar_t转换到char的错误。
Cpp代码
CString str;
int num;
str.Format(_T("%d"),num);
1 string to
CString
CString.format("%s",string.c_str());
2 CString to string
string str(CString.GetBuffer());
CString.ReleaseBuffer()
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char,CString,sizeof(char));
6 char * to CString
CString.format("%s",char*);
CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char
*转换时,要把char定义成为const char*,这样是最安全的。
有一篇文件CString 操作指南,比较深刻
http://www.vckbase.com/document/viewdoc/?id=1094
GetBuffer,它的作用是返回一个可写的缓冲指针
关于ReleaseBuffer
当你调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。
必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString
对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
例子:
CString s(...);
LPTSTR p = s.GetBuffer();
//... 这个指针 p 发生了很多事情
int n = s.GetLength(); // 很糟D!!!!! 有可能给出错误的答案!!!
s.TrimRight(); // 很糟!!!!! 不能保证能正常工作!!!!
s.ReleaseBuffer(); // 现在应该 OK
int m = s.GetLength(); // 这个结果可以保证是正确的。
s.TrimRight(); // 将正常工作。
MFC中ReleaseBuffer的代码:
void ReleaseBuffer( int nNewLength = -1 )
{
if( nNewLength == -1 )
{
nNewLength = StringLength( m_pszData );
}
SetLength( nNewLength );
}
很明显ReleaseBuffer只有一个作用,就是更新字符串的长度。
WCHAR ->
CString
view plaincopy
to clipboardprint?
WCHAR ch1[10]=”abc”;
CString ch2;
Ch2=ch1;
CString->WCHAR
view plaincopy
to clipboardprint?
CString src =”abc”
WCHAR des [10];
lstrcpy(des,src);
WCHAR ->double
view plaincopy
to clipboardprint?
Double des;
10d44
WCHAR src[10];
swscanf(src,_T("%lf"),&des);
double->CString
view plaincopy
to clipboardprint?
CString des
double src
des.Format(_T("%lf"), src);
WCHAR ->int
view plaincopy
to clipboardprint?
Double des;
WCHAR src[10];
swscanf(src,_T("%d"),&des);
int ->CString
view plaincopy
to clipboardprint?
CString des
double src
des.Format(_T("%d"), src);
char -> WCAHR
view plaincopy
to clipboardprint?
WCHAR WBuffer[BufferLength];
memset(WBuffer, 0,BufferLength);
char * src =”abc”;
int nLen = strlen(src) +1;
int nwLen = MultiByteToWideChar(CP_ACP, 0, src,nLen, NULL, 0);
MultiByteToWideChar(CP_ACP, 0, src, nLen, WBuffer, nwLen); //change char * to PWCHAR
////-————————————————————
_T宏的作用就是转换成TCHAR
当支持UNICODE的时候,CString内的类型是wchar_t,当转换时必须考虑是wchar_t而不是char,所以相应的也要改变。
从CString转换为int
Cpp代码
CString str; int num; num=_wtoi(str.GetBuffer()); //int _wtoi (const wchar_t *_Str); //说明CString -> wchar_t *_ 用str.GetBuffer();
从int转为CString,因为是wchar_t所以直接用CString::Format()时会出现无法从wchar_t转换到char的错误。
Cpp代码
CString str;
int num;
str.Format(_T("%d"),num);
1 string to
CString
CString.format("%s",string.c_str());
2 CString to string
string str(CString.GetBuffer());
CString.ReleaseBuffer()
3 string to char *
char *p=string.c_str();
4 char * to string
string str(char*);
5 CString to char *
strcpy(char,CString,sizeof(char));
6 char * to CString
CString.format("%s",char*);
CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char
*转换时,要把char定义成为const char*,这样是最安全的。
有一篇文件CString 操作指南,比较深刻
http://www.vckbase.com/document/viewdoc/?id=1094
GetBuffer,它的作用是返回一个可写的缓冲指针
关于ReleaseBuffer
当你调用 ReleaseBuffer 时,字符串的实际长度会被重新计算,然后存入 CString 对象中。
必须强调一点,在 GetBuffer 和 ReleaseBuffer 之间这个范围,一定不能使用你要操作的这个缓冲的 CString
对象的任何方法。因为 ReleaseBuffer 被调用之前,该 CString 对象的完整性得不到保障。
例子:
CString s(...);
LPTSTR p = s.GetBuffer();
//... 这个指针 p 发生了很多事情
int n = s.GetLength(); // 很糟D!!!!! 有可能给出错误的答案!!!
s.TrimRight(); // 很糟!!!!! 不能保证能正常工作!!!!
s.ReleaseBuffer(); // 现在应该 OK
int m = s.GetLength(); // 这个结果可以保证是正确的。
s.TrimRight(); // 将正常工作。
MFC中ReleaseBuffer的代码:
void ReleaseBuffer( int nNewLength = -1 )
{
if( nNewLength == -1 )
{
nNewLength = StringLength( m_pszData );
}
SetLength( nNewLength );
}
很明显ReleaseBuffer只有一个作用,就是更新字符串的长度。
相关文章推荐
- 常用数据类型转换CString double char int WCHAR
- 常用数据类型转换CString double char int WCHAR(转)
- C++ 数据类型转换(static_ca…
- MySQL 数据类型 (Text,numbe…
- Visual C++常用数据类型转换详解
- 数据类型转换(二)char*和CString的转换
- 实例:常用数据类型之间的相互转换
- VC常用数据类型使用转换
- Microsoft® SQL Server™中常用数据类型之总结
- 存储过程里出错:在将 nvarchar 值 'MAX' 转换成数据类型 smallint 时失败, 的终极解决方法
- Struts2 Chater 4&5 Struts2中的验证输入和数据类型的转换
- CString,TCHAR ,string,char等数据类型转换
- vc常用数据类型使用转换详解-(2013/09/18)
- php——02数据类型转换&&类型检测
- VC常用数据类型使用转换详解
- JavaScript基础之数据类型转换 、运算符 &表达式
- VC常用数据类型及使用转换详解
- Visual C++常用数据类型转换详解
- [导入]常用数据类型使用转换详解
- C++常用数据类型转换详解 .