C++各种数据类型之间的转换
2016-04-24 18:19
579 查看
在笔者在做windows开发的初期,各种数据类型的转换着实让笔者头痛不已,一些函数只需要特定类型的形参,而我们“手头”的参数又是各种其他类型,着实egg疼:
在做了一段时间开发过后,笔者特此总结了以下数据类型间的转化(有不足之处希望大家指正):
1.CString与TCHAR 相互转换
CString TCHARToCString(TChar *buf )
{
Cstring str;
Str.Format(L”%s”,buf);
return Str;
}
TCHAR* CStringToTCHAR(CString str)
{
TCHAR *buf;
_tcscpy(buf,str);
return buf;
}
TChar*CharTOTchar1(char *szchar)
{
TCHAR *wszBuff;
wcscpy(wszBuff,A2T((LPCSTR) szchar));
returnwszBuff;
}
TChar*CharTOTchar2(char *szchar)
{
DWORD dwsize = MultiByteToWideChar(CP_OEMCP, 0, szchar, -1,NULL, 0);
TCHAR * sztchar = new TCHAR[dwsize];
MultiByteToWideChar(CP_OEMCP, 0, szchar, -1, sztchar,dwsize);
}
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)
{
LPSTR pszOut = NULL;
if (lpwszStrIn != NULL)
{
int nInputStrLen = wcslen (lpwszStrIn);
// Double NULL Termination
int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;
pszOut = new char [nOutputStrLen];
if (pszOut)
{
memset (pszOut, 0x00, nOutputStrLen);
WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);
}
}
return pszOut;
}
std::string CStringToString(CString str)
{
CStringAstra(str.GetBuffer(0));
str.ReleaseBuffer();
std::string strReturn=stra.GetBuffer(0);
stra.ReleaseBuffer();
return strReturn;
}
CStringStringToCString(std::string str)
{
CString strCString;
strCString= str.c_str();
returnstrCString;
}
int CStringToInt(CString str)
{
int b=_ttoi(str);
return b;
}
//这个就简单了,很多类型转换成CString,都用CString.format这种方法
CStringIntToCString(int i)
{
CString str;
Str.format(L”%d”,i);
return Str;
}
在做了一段时间开发过后,笔者特此总结了以下数据类型间的转化(有不足之处希望大家指正):
1.CString与TCHAR 相互转换
1.1 TCHAR转为CString
CString TCHARToCString(TChar *buf ){
Cstring str;
Str.Format(L”%s”,buf);
return Str;
}
1.2 CString转为TCHAR数组
TCHAR* CStringToTCHAR(CString str){
TCHAR *buf;
_tcscpy(buf,str);
return buf;
}
2. char与TCHAR 相互转换
2.1 char转为TCHAR
TChar*CharTOTchar1(char *szchar){
TCHAR *wszBuff;
wcscpy(wszBuff,A2T((LPCSTR) szchar));
returnwszBuff;
}
TChar*CharTOTchar2(char *szchar)
{
DWORD dwsize = MultiByteToWideChar(CP_OEMCP, 0, szchar, -1,NULL, 0);
TCHAR * sztchar = new TCHAR[dwsize];
MultiByteToWideChar(CP_OEMCP, 0, szchar, -1, sztchar,dwsize);
}
2.2 TCHAR转为char
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)
{
LPSTR pszOut = NULL;
if (lpwszStrIn != NULL)
{
int nInputStrLen = wcslen (lpwszStrIn);
// Double NULL Termination
int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;
pszOut = new char [nOutputStrLen];
if (pszOut)
{
memset (pszOut, 0x00, nOutputStrLen);
WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut, nOutputStrLen, 0, 0);
}
}
return pszOut;
}
3. CString与String 相互转换
3.1 CString转为string
std::string CStringToString(CString str) {
CStringAstra(str.GetBuffer(0));
str.ReleaseBuffer();
std::string strReturn=stra.GetBuffer(0);
stra.ReleaseBuffer();
return strReturn;
}
3.2 string转为CString
CStringStringToCString(std::string str) {
CString strCString;
strCString= str.c_str();
returnstrCString;
}
4.CString与int 相互转换
4.1 CString转为int
int CStringToInt(CString str){
int b=_ttoi(str);
return b;
}
4.2 int转为CString
//这个就简单了,很多类型转换成CString,都用CString.format这种方法CStringIntToCString(int i)
{
CString str;
Str.format(L”%d”,i);
return Str;
}
相关文章推荐
- c++ map使用
- C++ 语法学习
- c++中的cin,cin.get(),cin.getline()读取字符串
- C++ primer
- C++ Leetcode 111Minimum Depth of Binary Tree
- C语言概述(简答)
- C++旅途 之 申请动态内存和释放
- C++第四次作业
- C语言中变长参数的函数的实现
- C++实验四—乘法口诀表
- 使用GNU make 编译C程序
- C++生成希尔伯特矩阵
- 各种排序算法代码(C语言版)
- c语言程序设计报告
- 一个C语言函数声明和定义的编译问题
- AndroidStudio 编译C/C++文件生成SO文件
- C++内存分配机制
- C++ new分配失败运行机制
- C/C++中inline/static inline/extern inline的区别及使用
- C/C++中inline/static inline/extern inline的区别及使用