MFC CString与cha* String等数据类型转换之间转换

137次阅读
没有评论

共计 1775 个字符,预计需要花费 5 分钟才能阅读完成。

CString与内置类型的转换总结如下

float、int、double->CString

在MFC中可以采用CString内置的函数Format实现,形式如下

CString destination;
destination.Format(_T("%??"),source);

%c 单个字符
%d 十进制整数(int)
%ld 十进制整数(long)
%f 十进制浮点数(float)
%lf 十进制浮点数(double)
%o 八进制数
%s 字符串
%u 无符号十进制数
%x 十六进制数
example(其他转换类似)

CString str;
int number=15;
str.Format(_T("%d"),number); //str="15"
str.Format(_T("%4d"),number); //str=" 15"(前面有两个空格)
str.Format(_T("%.4d"),number); //str="0015"

CString->float、int、double

短整型(int) i = atoi(temp)

长整型(long) l = atol(temp)

浮点(double) d = atof(temp)

  example

CString temp= "100";
int  intResult;
intResult= atoi(temp);

以下为UniCode编码中转换

CString->char*

方法1:使用函数 T2A、W2A

CString cstr = _T("testdd你好啊");
//声明标识
USES_CONVERSION;
//函数T2A和W2A均支持ATL和MFC中的字符
char * pFileName = T2A(cstr);

方法2:借助string

CString str = _T("D:\\校内项目");
std::string sz2 = CT2A(str.GetBuffer());
//转化为非unicode. 
str.ReleaseBuffer(); //GetBuffer后需要ReleaseBuffer
char * pChar = (char *)sz2.c_str();

方法三:

CString str = _T("testdd你好啊");
int len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
char *buf = new char[len + 1];
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, len, NULL, NULL);

//...  
delete[] buf;

 

char* ->CString

主要过程为char*->TCHAR->CString

char sText[] = "abcdasd你好啊!";

//计算char *数组大小,以字节为单位,一个汉字占两个字节
int charLen = strlen(sText);
//计算多字节字符的大小,按字符计算。
int len = MultiByteToWideChar(CP_ACP, 0, sText, charLen, NULL, 0);
//为宽字节字符数组申请空间,数组大小为按字节计算的多字节字符大小
TCHAR *buf = new TCHAR[len + 1];
//多字节编码转换成宽字节编码
MultiByteToWideChar(CP_ACP, 0, sText, charLen, buf, len);
buf[len] = '\0'; //添加字符串结尾,注意不是len+1
//将TCHAR数组转换为CString
CString pWideChar;
pWideChar.Append(buf);
//删除缓冲区
delete[]buf;

或者试用A2T或A2W

char *pChar = "你好啊abc";
USES_CONVERSION;
CString cstr = A2T(pChar);

或者如下,可能涉及编码问题

char* pData = "1234";
CString strData(pData);

 

静态文本直接可以如下:

CString sz1 = _T("test string")

CString->String

CString sz1 = L"abcdasd你好啊!";
std::string sz2 = CT2A(sz1.GetBuffer()); //转化为非unicode.
sz1.ReleaseBuffer();   //GetBuffer后需要ReleaseBuffer

 

正文完
 
admin
版权声明:本站原创文章,由 admin 2022-07-02发表,共计1775字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码